web-dev-qa-db-ja.com

SSDTでのPOSTデータデプロイ

.csvファイルからデータベースにデータをアップロードする展開後のスクリプトを作成する必要があります。しかし、どうすればこれができるのか理解できません。

プロジェクトをサーバーにデプロイしようとすると、次のエラーメッセージが表示されます。

(2354,1):SQL72014:.Net SqlClientデータプロバイダー:メッセージ4861、レベル16、状態1、9行目ファイル "。\ Data\DataFile.csv"を開くことができなかったため、一括読み込みできません。オペレーティングシステムエラーコード3(システムは指定されたパスを見つけることができません。) (2346,0):SQL72045:スクリプト実行エラー。実行されたスクリプト:

誰かが私を助けてくれませんか?

P.S.以下に私のファイルの例を示します。

私のSSDTプロジェクトの構造:

Source
    Data
        DataFile.csv
    Script
        PostDeployment
            DataFile.sql
    PostDeployment.sql

DataFile.sql:

IF OBJECT_ID('tempdb..#t') IS NOT NULL DROP TABLE #t
CREATE TABLE #t 
    (   
        Column NVARCHAR(100),
        Column2 NVARCHAR(100)
    )
;    
BULK INSERT #t
FROM '$(DataFile)' 
WITH (CODEPAGE = '1251', FIRSTROW = 2, FIELDTERMINATOR = ',', ROWTERMINATOR = '\n', DATAFILETYPE = 'widechar')

SELECT * INTO table1 FROM #t AS tcbm

PostDeployment.sql

:setvar DataFile .\Data\DataFile.csv
:r .\Script\PostDeployment\DataFile.sql

変更した場合:setvar DataFileから..\..\Data\CarBrandModel-展開も同じエラーで失敗します。

1
whitebeast

CSVファイルは展開するdacpacに含まれていないため、dacpacと一緒にコピーし、相対パスを使用する場合は作業ディレクトリが想定どおりであることを確認する必要があります。

私が余分なファイルに対して行うことは、ファイルの「ビルドアクション」を「新しい場合はコピー」に設定することです。dacpacがbinフォルダーにビルドされると、「データ」サブフォルダーも作成されます。必ずそれをコピーしてください。常にdacpac。

ed

2
Ed Elliott