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
のように見えません。
おかげでたくさん!これは私のために働く。 – Dennis