我的SSDT項目中有幾個數據遷移腳本。從一個表到另一臨時表使用數據遷移腳本時出現「列名無效」錯誤
首先一個存儲數據:
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
其次從臨時表中的一個將數據傳輸到另一個表:
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失敗,因爲 「無效的列名'Thumbprint'」錯誤。
我幾乎可以肯定,發生這種情況是因爲SQLCMD嘗試編譯整個部署腳本,只有當[DocumentEvent].[Thumbprint]
存在時才能成功完成此操作。
但是,什麼是解決辦法?
貌似IF EXISTS
在第一腳本不能幫助。
非常感謝!這對我有用。 – Dennis