プログラミングと日々思ったことなど

ブログ名通りです。仕事でプログラミングをはじめました。

SqlServerで、ストアドプロシージャを作成 その2

明日記事を書くと言っていたのに、遅れてしまいました。
反省。

前回の続きからです。

IF @header = 1
BEGIN
-- BCPコマンド出力設定をする
-- 半角スペースある/なしで正常に実行されないので注意する
SET @BCP_str = ''
SET @BCP_str = 'bcp "' + @SQL_heder_edit +'"'
SET @BCP_str = @BCP_str + ' queryout "' + @out_folder + ' Header.csv" '
SET @BCP_str = @BCP_str + '-c -t"," '
SET @BCP_str = @BCP_str + ' -S' + @S_name + ' '
SET @BCP_str = @BCP_str + '-d ' + ' test' + ' '
SET @BCP_str = @BCP_str + '-U ' + @U_id + ' '
SET @BCP_str = @BCP_str + '-P ' + @pass + ' ;'

-- CSVファイル実行
-- xp_cmdshell は、OS のコマンドを実行して出力をテキストの行として返す
EXECUTE @result = master.dbo.xp_cmdshell @BCP_str

IF @result = 1
BEGIN
	SET @R_Msg = 'ヘッダー作成失敗'
	RETURN @R_value
END

END

-- BCPの詳細ファイル出力
SET @BCP_str = ''
SET @BCP_str = 'bcp "' + @SQL +'"'
SET @BCP_str = @BCP_str + ' queryout "' + @out_folder + ' Detail.csv" '
SET @BCP_str = @BCP_str + '-c -t"," '
SET @BCP_str = @BCP_str + ' -S' + @S_name + ' '
SET @BCP_str = @BCP_str + '-d ' + ' test' + ' '
SET @BCP_str = @BCP_str + '-U ' + @U_id + ' '
SET @BCP_str = @BCP_str + '-P ' + @pass + ' ;'

EXECUTE @result = master.dbo.xp_cmdshell @BCP_str

IF @result = 1
BEGIN
	SET @R_Msg = '詳細ファイル作成失敗'
	RETURN @R_value
END

IF @header = 1
BEGIN
-- ヘッダーと詳細のファイル結合
SET @File_copy = ''
SET @File_copy = @File_copy + 'copy /B'
SET @File_copy = @File_copy + @out_folder + ' Header.csv'
SET @File_copy = @File_copy + ' +'
SET @File_copy = @File_copy + @out_folder + ' Detail.csv'
SET @File_copy = @File_copy + ' '
SET @File_copy = @File_copy + @out_folder + file_name
-- CSVファイル結合実行
EXECUTE @result = master.dbo.xp_cmdshell @File_copy
END

IF @header = 0
BEGIN
SET @File_copy = ''
SET @File_copy = @File_copy + 'copy /B'
SET @File_copy = @File_copy + @out_folder + ' Detail.csv'
SET @File_copy = @File_copy + ' '
SET @File_copy = @File_copy + @out_folder + file_name
EXECUTE @result = master.dbo.xp_cmdshell @File_copy
END

IF @header = 1
BEGIN
-- ヘッダー消去
SET @File_Del = ''
SET @File_Del + ' del /Q'
SET @File_Del + @out_folder + ' Header.csv'
EXECUTE master.dbo.xp_cmdshell @File_Del
END

-- 詳細ファイル消去
SET @File_Del = ''
SET @File_Del + ' del /Q'
SET @File_Del + @out_folder + ' Detail.csv'
EXECUTE master.dbo.xp_cmdshell @File_Del

END
-- 例外エラー
END TRY
BEGIN CATCH

RETURN @R_value	-- -1(失敗の値)が代入されている

END CATCH

SET @R_Msg = CAST(@Cnt AS VARCHAR) + '件を書き込みました。'
SET @R_value = 0 --成功の値(戻り値)
RETURN @R_value

END
GO

変数にどんどん代入していって、実行させるための文字列を作成するのが、難しかったです。


仕事を始めて数ヶ月、少しずつ慣れてきました。
まだ沢山学ばねばならないのですが、そろそろキーボードだけでパソコンを動かす方法(ショートカットキーだったかな)も覚えていこうかな。