• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:BULKINSERTのWITHオプションについて)

BULKINSERTのWITHオプションについて

arihinaの回答

  • arihina
  • ベストアンサー率26% (4/15)
回答No.1

頓珍漢な回答をしていたらスミマセン。 やはり、プログラムからSQLを発行しているのですよね。 そして、csvファイルは特定のものではないわけですね。 もしそうでしたら、毎回、csvファイルを別の場所へ最終行だけ取り除いてコピーすればいいかと思うんですがどうでしょう。 そのコピー先のcsvをBULK INSERTすればいいですし。 10000行くらいならなんとかなるのでは。 データのフォーマットチェックも同時に出来ますし。

nomorisan
質問者

お礼

ご回答ありがとうございます。 今回の問題が解決しない場合は、csvファイルをコピーして 最終行を取り除いて処理しようと思いますが 解決できるようにもう少し取り組もうと思います。 ありがとうございました。

関連するQ&A

  • SQL SERVERの BULK INSERT

    SQL SERVERの BULK INSERTについて。 TESTというテーブルにtest.csvをBULK INSERTによりデータをインポートしようとしているのですが変数を使わずに下記のように書くと正常に動くのですが、 BULK INSERT TEST FROM 'C:\data\test.csv' WITH ( FIELDTERMINATOR = ',', ROWTERMINATOR = '\n' ) 変数を使って下記のようにすると「不適切な構文があります。」とエラーとなってしまいます。 DECLARE @data varchar(100) SET @data = 'C:\data\test.csv' BULK INSERT TEST FROM @data WITH ( FIELDTERMINATOR = ',', ROWTERMINATOR = '\n' ) 解決策を教えてください。

  • MS-SQLプロシージャでファイルを削除したい

    お世話になります。 SQL Server 2005のプロシージャにて テーブルの削除→CSVファイルの取り込み→CSVファイルの削除を行いたいと思っております。 ALTER PROCEDURE [dbo].[テーブル削除+インポート+ファイル削除] AS begin DELETE FROM dbo.テーブル BULK INSERT テーブル FROM 'テキストファイル' WITH (DATAFILETYPE='char', FIELDTERMINATOR=',',ROWTERMINATOR='\n') end ここで、テーブル削除とCSVファイルのインポートはできたのですが、ファイルの削除が未だにできません。 このあとテキストファイルをこのプロシージャ内で削除するにはどうすればよいでしょうか。

  • BULK INSERTについて

    CSVをバルクインサートでitemテーブルにBULK INSERTする際に、 下記のようなSQL文を使っているのですが、CSV内のブランク文字は 実行後にNULLになってしまいます。 やりたいことはNULLではなく空白文字("")にしたいのですが、 下記のSQL文をどのように変えればよいのでしょうか。 または、CSVを変更する方法でもよいです。 BULK INSERT item FROM 'c:\test.txt' WITH ( FIELDTERMINATOR = ',', ROWTERMINATOR = '\n' ); 大変お手数ですが、 わかる方がいらっしゃいましたらよろしくお願いいたします。

  • サーバーと実行端末が違う場合のsqlcmdの書き方

    コマンドの実行端末にDBがある場合は成功するのですが、 サーバーが別の端末の場合ファイルが見つからないようです。 データファイルの書き方を変える必要があるのでしょうか? SQLServerは2008です。 SQLCMD -S"SRV\XXXXXX" -U"user" -P"pass" -d"DB1" -Q"INSERT INTO [テーブル名] SELECT CONVERT(datetime,年月),データ1,データ2,データ3,データ4 FROM OPENROWSET(BULK 'D:\test\bcptest\test.csv', FORMATFILE='D:\test\bcptest\test.fmt',FIRSTROW = 2) x"

  • 【 困 】 ストアドプロシージャ

    OS:WIN2000 DB:SQLServer2000 下記のストアドプロシージャを作成しました。 BULK INSERTを使っています。 引数でCSVファイルのパスを渡そうとしています。 「エラー170:行5: '@Query'の近くに無効な構文があります。」 というエラーになってしまいます。 5行目にあるFromの次に変数を書くには、どうしたらいいのでしょうか? CREATE proc SP_BULK_INSERT @Query char(100) AS BULK INSERT T_顧客マスタ FROM @Query WITH (FIELDTERMINATOR = ',') GO

  • エクセルVBA実行エラーの対処方法

    以前教えていただいた構文ですが、NOWより過ぎてない日付がFirstRow 31より有り、過ぎた日付がない場合に実行するとエラーが出ます。これを回避するのを教えてください。 宜しくお願いします。 Const DateColumn = "B" '日付が入力されている列 Const FirstRow = 31 '削除の対象となる可能性がある最初の行 Dim LastRow With ActiveSheet LastRow = .Range(DateColumn & Rows.Count).End(xlUp).row If LastRow <= FirstRow Then MsgBox "処理すべきデータがありません。" _ & vbCrLf & "マクロを終了します。" _ , vbExclamation, "データ無し" Exit Sub End If With Application .ScreenUpdating = False .Calculation = xlManual End With .Range(DateColumn & FirstRow - 1 & ":" & DateColumn & LastRow) _ .AutoFilter Field:=1, Criteria1:="<=" & Now, _ Field:=1, Criteria2:="", Operator:=xlOr .Range(DateColumn & FirstRow & ":" & DateColumn & LastRow) _ .SpecialCells(xlCellTypeVisible).EntireRow.Delete .Cells.AutoFilter End With With Application .CutCopyMode = False .Calculation = xlAutomatic .ScreenUpdating = True End With

  • テーブル列数とデータファイル列数の違うbcpインサートをしたい

    DBのテーブルの列数は258です。 インサートするデータファイルの列数は65です。 データファイルは","で区切られたファイルです。 SQL Serverは2005です。 コマンドを下記のように書きました。 SQLCMD -S"\SQLEXPRESS" -U"user" -P"pass" -d"計測" -Q"INSERT INTO [計測データ] SELECT 4,CONVERT(datetime,年月),データ1,データ2,データ3,データ4,データ5,・・・データ256 FROM OPENROWSET(BULK 'D:\200906.csv', FORMATFILE='D:\test.fmt',FIRSTROW = 2) x" フォーマットファイルは、 8.0 68 1 SQLCHAR 0 1 "" 0 Firsrt_QUOTE "" 2 SQLCHAR 0 20 "\"," 1 年月 "" 3 SQLCHAR 0 10 "," 2 データ1 "" 4 SQLCHAR 0 10 "," 3 データ2 "" 5 SQLCHAR 0 10 "," 4 データ3 "" ・・・ 66 SQLCHAR 0 10 "\r\n" 65 データ64 "" しかしエラーになってしまいます。 そもそも列数が違うと無理なのでしょうか。

  • プロシージャの引数について

    DB : SQL Server 2005 プロシージャの引数にCSVファイルのフルパスを入れたいのですが、 エラーが出て困っています。 http://questionbox.jp.msn.com/qa262720.html ↑の回答も参考にしましたが、どうしても出来ません。 最初は以下のように書いていました。 BULK INSERT IDATA from ''+ @pass + '' with ( fieldterminator = ',', rowterminator = '\n' ) このときは、プロシージャを作る段階で↓のエラーメッセージが出ました。 >メッセージ 1038、レベル 15、状態 1、プロシージャ sss、行 30 オブジェクト名または列名がないか、空です。SELECT INTO ステートメントの場合は、各列に名前が付いていることを確認してください。その他のステートメントの場合は、空の別名を検索してください。"" または [] で定義された別名は許可されません。別名として、名前または 1 つのスペースを追加してください。 >メッセージ 319、レベル 15、状態 1、プロシージャ sss、行 30 キーワード 'with' 付近に不適切な構文があります。このステートメントが共通テーブル式または xmlnamespaces 句の場合、前のステートメントをセミコロンで終了してください。 また、上記の回答を参考にしたところ、プロシージャは作成できましたが、 引数を与えて実行する段階で↓のエラーメッセージが出ました。 >メッセージ 203、レベル 16、状態 2、プロシージャ sss、行 32 名前 'BULK INSERT IDATA from '\\・・・\・・・\取込.csv' with ( fieldterminator = ',',rowterminator = '\n')' は有効な識別子ではありません。 引数で与えるのでなく、直接入力した場合は出来ます。 よろしくお願いします (><)

  • SQLServerでREPLACE/SELECTができるか?

    My-SQLでは以下のSQLにより test01というDBからtest02というDBへ データをinsertすることができると思います。 また「insert」ではなく「replace」にすることで 同一キーの場合エラーにならず置き換えで データを登録してくれます。 ======================================= insert into [test01].dbo.test_table select * from [test02].dbo.test_table ======================================= そこで上記の「replace」を同じように SQLServerでできないか知っている方が おられたら是非ご教授いただきたく。 よろしくお願いいたします。

  • bcpによる、テーブル→CSVファイル出力について

    bcpによる、テーブル→CSVファイル出力について SQL Server(2003)のクエリアナライザからテーブル->ファイル出力を試みたのですが、うまくいきません。 サーバからの実行ではなく、クライアントのEnterpriseManagerのクエリ実行です。 このエラーは、サーバ接続自体がうまくいってないということでしょうか? exec master.dbo.xp_cmdshell 'bcp xxxxx.dbo.コピー元テーブル名 out C:\AAA.csv -c -S サーバ名 -U 接続ID名 -P 接続パスワード' 実行結果 SQL Status=S1000 ,NativeError=0 Error=[Microsoft][ODBC SQL Server Driver]一括コピーホストのデータファイルが開けません。 csv->テーブルについては、BULK INSERTで問題無く取り込めているので、単純に逆を行いたいだけです。 bcp使わない方法があれば、それでもいいのですが。。。。。