在一个表中创建具有多个 ALTER 和 UPDATES 的整合 SQL 脚本时出现问题
Posted
技术标签:
【中文标题】在一个表中创建具有多个 ALTER 和 UPDATES 的整合 SQL 脚本时出现问题【英文标题】:Issue creating consolidated SQL script with multiple ALTER & UPDATES to one table 【发布时间】:2020-06-22 20:02:58 【问题描述】:我正在编写一个整合的 SQL 脚本,需要
-
将名为 AdjudicatedDateTime 的日期时间列添加到 WarrantyAdjudicationStaging 表中。
为表中的新条目添加默认日期 GETDATE()
使用 AdjudicatedDateTime 的 NULL 值更新旧记录
这些语句似乎单独运行良好,但我需要它们一起运行。当我尝试一起运行它们时,我收到以下错误:
消息 207,第 16 层,状态 1,第 27 行 列名“AdjudicatedDateTime”无效
USE NATesterData
ALTER TABLE WarrantyAdjudicationStaging
ADD AdjudicatedDateTime datetime
USE NATesterData
ALTER TABLE WarrantyAdjudicationStaging
ADD CONSTRAINT DF_WarrantyAdjudicationStaging DEFAULT GETDATE() FOR AdjudicatedDateTime
USE NATesterData
UPDATE WarrantyAdjudicationStaging
SET AdjudicatedDateTime = AuditResults.AdjudicatedDateTime
FROM WarrantyAdjudicationStaging was
INNER JOIN
(
SELECT MAX(dateTimeRun) AdjudicatedDateTime, was.WarrantyAdjudicationGroupID
FROM WarrantyAdjudicationStaging was
INNER JOIN (
SELECT DISTINCT WarrantyAdjudicationGroupID
FROM WarrantyAdjudicationStaging
WHERE WarrantyAuditKey IS NULL
) exceptions
ON was.WarrantyAdjudicationGroupID = exceptions.WarrantyAdjudicationGroupID
INNER JOIN WarrantyUsageAudit wua
ON was.WarrantyAuditKey= wua.WarrantyAuditKey
GROUP BY was.WarrantyAdjudicationGroupID
) AuditResults on was.WarrantyAdjudicationGroupID = AuditResults.WarrantyAdjudicationGroupID
WHERE WAS.AdjudicatedDateTime IS NULL
AND WarrantyAuditKey IS NULL
【问题讨论】:
那么,有什么问题呢?你的问题是什么?为什么有 3 个USE
语句,当它们定义同一个数据库时?
当我执行查询时,我得到这个“消息 207,级别 16,状态 1,第 27 行无效的列名 'AdjudicatedDateTime'。”
在每个块之间放置一个 GO。删除不必要的 USE 语句。您可以将前两个块组合成一个语句...添加具有默认约束的列。语法很简单。
【参考方案1】:
在语句后添加 GO 以分批拆分它们
【讨论】:
请注意,根据发送语句GO
的内容,可能会导致更多错误。 GO
不是 Transact-SQL 关键字,它是 IDE 关键字,由 SSMS 和 Azure Data Studio 等应用程序以及 sqlcmd
和 sqlcli
等 CLI 使用。以上是关于在一个表中创建具有多个 ALTER 和 UPDATES 的整合 SQL 脚本时出现问题的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Google 表格中创建多个工作表引用的 INDIRECT 数组字符串?