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
変数にどんどん代入していって、実行させるための文字列を作成するのが、難しかったです。
仕事を始めて数ヶ月、少しずつ慣れてきました。
まだ沢山学ばねばならないのですが、そろそろキーボードだけでパソコンを動かす方法(ショートカットキーだったかな)も覚えていこうかな。