在一个表中创建具有多个 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 等应用程序以及 sqlcmdsqlcli 等 CLI 使用。

以上是关于在一个表中创建具有多个 ALTER 和 UPDATES 的整合 SQL 脚本时出现问题的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Google 表格中创建多个工作表引用的 INDIRECT 数组字符串?

无法在 DynamoDB 中创建多个属性

如何在 tableview 中创建一个具有多个字段的单元格?

在oracle存储过程中创建暂时表

在 C# 的代码隐藏中创建具有值的表脚本

有没有办法在 MongoDB 中创建一个具有多个值的过滤器?