• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:batからOSQLを起動してデータを落としたのですが・・・)

データを落とす方法とNULLのスペースへの置き換え方法

このQ&Aのポイント
  • 「bat」から「OSQL」を使ってデータを落とす方法について教えてください。
  • データを落とした際に出力された「TXTデータ」のスペース箇所に「NULL」という文字が入っている場合、スペースへの置き換え方法を教えてください。
  • 「BAT」から「OSQL」を起動する際にパラメータを使用するか、SQL発行に「UPDATE文」を付けるかを教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • jamshid6
  • ベストアンサー率88% (591/669)
回答No.2

うーん、想像力が欠如していました。 確かにあの質問の後なら、このクエリを実行しようとしますよね。。 BCPの場合、このような複数ステートメントのクエリはストアドプロシージャにして実行するのが一般的です。 (SET variable文や値を返さないSELECT文が含まれると、そのメッセージが出ます) しかし、そうも言ってられないので、ちょっと裏技っぽくなってしまいますが、対応策をご紹介します。 クエリ部分の先頭に「SET FMTONLY OFF;SET NOCOUNT ON;」と足してください。 余談ですが、複数ステートメントを並べて実行する場合は、各ステートメントの末尾にセミコロンを書くようにしましょう。 (SQL Serverはコマンド末尾のセミコロンはなくてもいけますが、Oracleなどと同じく推奨されています)

mariko0512
質問者

お礼

お返事ありがとうございます。 >「SET FMTONLY OFF;SET NOCOUNT ON;」 を追加して試しました。 きちんと動きました。本当に驚いていますw 午前中はやり方がわからなかったので、SQLでISNULL関数を使用していたのですが 色々弊害が発生して対応に追われていました。(変なスペースが前後に・・・) 今回これを教えて頂いてその問題も無くなりこれでスムーズにデータのやり取りが行えます。 質問をたくさんしましたが、都度回答をして頂きありがとうございました。 また困ったらここに来て質問をしたいと思いますw その時はまた宜しくお願い致しますね♪ 本当にありがとうございました。

その他の回答 (1)

  • jamshid6
  • ベストアンサー率88% (591/669)
回答No.1

最初からISNULL(項目,'')という形でSELECT文を書くことになると思います。 sqlcmdでなくて、osqlということはSQL Server 2000ですか? CSVのようなデータ出力なら、bcpユーティリティを使うことが多いですね。ヘッダーはつきませんが、NULLもでません。

mariko0512
質問者

お礼

こっちにもお礼を書いていませんでしたので書いておきます。 BCPという方法を教えて下さりありがとうございますね

mariko0512
質問者

補足

毎回回答ありがとうございます。 使用しているのはSQL Server 2000なのかな? SQL Server version 08.00.0760と書いてます。 BCPを使用してデータの出力を行ったところエラーが出ました。 下記SQL(jamshid6さんに教えていただいたSQLをしようしてますw)をBCPで実行しました所 bcp "DECLARE @NOW datetime DECLARE @PREVEOM datetime DECLARE @DP int DECLARE @PREVEOM2 datetime DECLARE @DP2 int SET @NOW=dateadd(d,09,GETDATE()) SET @PREVEOM=DATEADD(d,DAY(DATEADD(m,-1,@NOW))*-1,DATEADD(m,-1,@NOW)) SET @DP=DATEPART(dw,@PREVEOM) SET @PREVEOM2=DATEADD(d,DAY(@NOW)*-1,@NOW) SET @DP2=DATEPART(dw,@PREVEOM2) select * from dbo.テーブル where 開始日>=(CONVERT(varchar,DATEADD(d,6-@DP+CASE WHEN @DP>=6 THEN 7 ELSE 0 END,@PREVEOM)-4,112)) and 終了日<=(CONVERT(varchar,DATEADD(d,6-@DP2+CASE WHEN @DP2>=6 THEN 7 ELSE 0 END,@PREVEOM2)-7,112)) " queryout %SQL_DIR%bcp_queryout.csv -c -t , -U %DB_USER% -P %DB_PSWD% >> %log_nm% 2>&1 ※※※ データエクスポート※※※ SQLState = S1000, NativeError = 0 Error = [Microsoft][ODBC SQL Server Driver]サーバーへのコピー中に、ホストファイルの行がスキップされた可能性があります。 ロードエラー 上記のエラーが発生しています。 これはどういった意味なのでしょうか? お手数おかけしますが、宜しくお願い致します。