2017-10-12 10 views
1

SSDTプロジェクトにデータ移行スクリプトがいくつかあります。別の一時テーブルへの1つのテーブルからデータ移行スクリプトを使用しているときに「無効な列名」エラーが発生する

まず1つのデータを格納する別のテーブルへ

IF EXISTS 
(
    SELECT * 
    FROM INFORMATION_SCHEMA.COLUMNS 
    WHERE table_name = N'DocumentEvent' 
    AND column_name = N'Thumbprint' 
) 
BEGIN 
    IF NOT EXISTS 
    (
     SELECT * FROM INFORMATION_SCHEMA.TABLES 
     WHERE TABLE_NAME = N'tmp_DocumentEventCertificates' 
    ) 
    BEGIN 
     CREATE TABLE tmp_DocumentEventCertificates 
     (
      [EventId] UNIQUEIDENTIFIER NOT NULL, 
      [Thumbprint] nvarchar(100) 
     ) 
    END 

    INSERT INTO 
     tmp_DocumentEventCertificates 
    SELECT 
     [EventId], 
     [Thumbprint] 
    FROM 
     [DocumentEvent] 
    WHERE 
     [Thumbprint] IS NOT NULL 
END 

第1転送一時テーブルからデータを:

IF EXISTS 
(
    SELECT * FROM INFORMATION_SCHEMA.TABLES 
    WHERE TABLE_NAME = N'tmp_DocumentEventCertificates' 
) 
BEGIN 
    UPDATE 
     [DocumentAttachment] 
    SET 
     [DocumentAttachment].[Certificate_Thumbprint] = tmp.[Thumbprint] 
    FROM 
     tmp_DocumentEventCertificates AS tmp 
    WHERE 
     ([DocumentAttachment].[EventId] = tmp.[EventId]) AND 
     ([DocumentAttachment].[ParentDocumentAttachmentId] IS NOT NULL) 

    DROP TABLE tmp_DocumentEventCertificates 
END 

[Thumbprint][DocumentEvent]テーブルから削除されています。
カラム[Certificate_Thumbprint][DocumentAttachment]テーブルに追加されています。

データは[DocumentEvent].[Thumbprint]から[DocumentAttachment].[Certificate_Thumbprint]に転送する必要があります。データベースはつまり、上記からの移行を必要とする状態にあるとき

これらのスクリプトは、[DocumentEvent].[Thumbprint]に存在する、期待どおりに動作し、[DocumentAttachment].[Certificate_Thumbprint]存在しません。

のため、データベースの移行時にdacpacの展開がすべて失敗しました。「列名が不正です」というエラーが発生しました。

これは、SQLCMDがデプロイスクリプト全体をコンパイルしようとしていることが原因で発生していると確信しています。これは[DocumentEvent].[Thumbprint]が存在する場合にのみ正常に実行できます。

しかし、回避策はありますか?

最初のスクリプトでIF EXISTSのように見えません。

答えて

2

はい、正しく、コンパイルエラーです。 列が存在しない場合、スクリプトはコンパイルできません。 IF存在および他のデータフロー構成は分析されません。

あなたはEXECにコンパイルエラーを生成するコードをラップする必要があります。

exec(
'INSERT INTO 
     tmp_DocumentEventCertificates 
    SELECT 
     [EventId], 
     [Thumbprint] 
    FROM 
     [DocumentEvent] 
    WHERE 
     [Thumbprint] IS NOT NULL') 
+0

おかげでたくさん!これは私のために働く。 – Dennis

関連する問題