SQL serverのストアドプロシージャを初制作
実際にはもっと処理を増やしていきますが、
1つの処理を実行するプロシージャができたのでメモ
現ソース
ALTER PROCEDURE [dbo].[CSV_IMPORT](@vfilepath varchar(200))
AS
BEGIN
--変数宣言
DECLARE @vbalk varchar(MAX)
DECLARE @icon int
--一時テーブル作成
CREATE TABLE #vtblname(
Calculation_target int
,Expenditure_date date
,Contents varchar(MAX)
,Amount_yen int
,Owned_financial_institution varchar(200)
,Major_item varchar(200)
,Medium_item varchar(200)
,Note varchar(MAX)
,Transfer varchar(200)
,ID varchar(200)
)
SET @vbalk =
'BULK INSERT #vtblname
FROM ' + char(39) + @vfilepath + char(39) + '
WITH (FORMAT = ''CSV''
,ROWTERMINATOR = ''0x0A''
,FIRSTROW = 2
,KEEPNULLS
)'
EXEC (@vbalk)
END
難航した点
・最初はテーブル変数を使用しようとしていたが、よくわからないエラーが出て、一時テーブルに変更。
・バルクインサートをプロシージャ内で実行する方法。
最初はテーブル名(テーブル変数の名残)、ファイルパスを変数で渡していたがプロシージャ内にバルクインサートのSQL直書きだとエラーになった。
次に、EXECTION(BALK ~)の記述を試したが変数がスコープ外になるようでこの方法も中止。ここでテーブル変数を諦めて一時テーブルに変更。この次にファイルパスでエラーが発生する。紆余曲折で最終的にここに辿り着いた。
実行はこのような感じ
読み込んだcsvと同件数の処理が確認できたので一旦Okじゃないでしょうか。
EXEC + プロシージャ名
パラメータ
だけでも実行できるようですね。
次は既存テーブルのデータと比較させていきます。
あでゅ
Comments