バッチファイルからSQLServerにあるDBの指定したテーブルのデータを取得し
取得したデータを違うサーバへインサートする処理を作成しています。
SQL文を別ファイルで作成し、SQLコマンドで呼び出すように進めています。
以下がコードです。
bat
1 2rem ## フォルダ設定 3rem ルートDIR 4set root_dir=’ルートDIR’ 5rem ログファイルフルパス 6set log_name=%root_dir%フルパス.log 7rem データ保管先 8set get_dir=D:'保管先' 9 10rem データ取得フォルダ作成 11if not exist %get_dir% mkdir %get_dir% 12if not exist %get_dir%\%year% mkdir %get_dir%\%year% 13if not exist %get_dir%\%year%\%month% mkdir %get_dir%\%year%\%month% 14 15rem データ取得 16SQLCMD -S サーバ名 -U ユーザ名 -P パスワード -i %root_dir%DATA.SQL -s, -W -h -1 -o Qutput.csv >> %log_name% 17SQLCMD -S サーバ名 -U ユーザ名 -P パスワード -i %root_dir%INSERT.SQL >> %log_name% 18
SQL
1*DATA.SQL* 2 3DECLARE @d datetime = GETDATE() 4DECLARE @d1 char(8) = CONVERT(char(8), @d, 112) 5DECLARE @d2 char(6) = REPLACE( CONVERT(char(8), @d, 108), ':', '' ) 6DECLARE @d3 char(4) = CONVERT(char(4), @d, 111) 7DECLARE @d4 char(2) = CONVERT(char(2), @d, 1) 8 9DECLARE @eName varchar(70) = 'D:\Dataget\SQLServer\data\' + @d3 + '\' + @d4 + '\' + @d1 + @d2 + _dbMst' +'.csv' 10 11SELECT * FROM sys.objects where type ='U' AND name NOT IN('CUSTOM','PRO')= @eName 12
SQL
1*INSERT.SQL * 2 3DECLARE @d datetime = GETDATE() 4DECLARE @d1 char(8) = CONVERT(char(8), @d, 112) 5DECLARE @d2 char(6) = REPLACE( CONVERT(char(8), @d, 108), ':', '' ) 6DECLARE @d3 char(4) = CONVERT(char(4), @d, 111) 7DECLARE @d4 char(2) = CONVERT(char(2), @d, 1) 8 9DECLARE @eName varchar(70) = ¥’保存先’¥ + @d3 + '\' + @d4 + '\' + @d1 + @d2 + '_dbMst_INSERT' + '.csv' 10 11BULK INSERT 'テーブル名' FROM DISK =@eName 12WITH 13( 14 FIELDTERMINATOR = ',', 15 ROWTERMINATOR = '\n' 16) 17
実行してみるても、ファイルは作成されるのですがlog内が空白なのと、
データの保管先であるget_dirにcsvファイルが作成されません。
なにかアドバイスをいただけないでしょうか。
回答3件
あなたの回答
tips
プレビュー