sql >> データベース >  >> RDS >> Sqlserver

ストアド プロシージャを使用した一括挿入

    ストアド プロシージャ コードに問題はありません。ポイントは BULK INSERT です。 コマンドはファイル名を変数として受け入れることができません。

    これは機能します:

    BULK INSERT ZIPCodes 
    FROM  'e:\5-digit Commercial.csv' 
    WITH 
      

    しかし、これは決して機能しません - ストアド プロシージャ内であろうとなかろうと:

    DECLARE @filename VARCHAR(255)
    SET @filename = 'e:\5-digit Commercial.csv' 
    
    BULK INSERT ZIPCodes 
    FROM @filename
    WITH 
      

    したがって、残念ながら、この方法ではできません。 BULK INSERT を構築することを検討できます ステートメントを文字列として (固定ファイル名で) 実行し、それを動的 SQL として実行しますが、他に解決策はありません。

    DECLARE @filepath nvarchar(500)
    SET @filepath = N'e:\5-digit Commercial.csv'
    
    DECLARE @bulkinsert NVARCHAR(2000)
    
    SET @bulkinsert = 
           N'BULK INSERT ZIPCodes FROM ''' + 
           @filepath + 
           N''' WITH (FIRSTROW = 2, FIELDTERMINATOR = '','', ROWTERMINATOR = ''\n'')'
    
    EXEC sp_executesql @bulkinsert
      

    1. PL / SQLおよびSQLでのVARCHAR2の最大サイズはいくつですか?

    2. 安全でない HTML 文字を HTML 文字エンティティ参照としてエンコードする T-SQL アルゴリズム

    3. Oracle 12c で select ステートメントを動的に構築する

    4. データベースが定期的にバックアップされるようにする方法