top of page

【SQL server】一時テーブルにCSVをINSERTする。

執筆者の写真: すばひすばひ

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 + プロシージャ名

パラメータ


だけでも実行できるようですね。


次は既存テーブルのデータと比較させていきます。




あでゅ

閲覧数:2,374回0件のコメント

最新記事

すべて表示

Comments


bottom of page