gpt4 book ai didi

sql-server - 使用数据迁移脚本时出现"Invalid column name"错误

转载 作者:行者123 更新时间:2023-12-04 02:01:47 25 4
gpt4 key购买 nike

我的 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] exists,并且 [DocumentAttachment].[Certificate_Thumbprint] 不存在

但是当迁移数据库时,所有部署 dacpac 的尝试都失败了,因为“无效的列名称‘指纹’”错误。

我几乎可以肯定,发生这种情况是因为 SQLCMD 尝试编译整个部署脚本,并且只有当 [DocumentEvent].[Thumbprint] 存在时才能成功完成。

但是解决方法是什么?

看起来第一个脚本中的 IF EXISTS 无济于事。

最佳答案

是的,你是对的,这是编译错误。如果该列不存在,则无法编译您的脚本。IF Exists等数据流构造不分析。

您应该将产生编译错误的代码包装在 EXEC 中:

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

关于sql-server - 使用数据迁移脚本时出现"Invalid column name"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46706506/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com