【问题标题】:Issue creating consolidated SQL script with multiple ALTER & UPDATES to one table在一个表中创建具有多个 ALTER 和 UPDATES 的整合 SQL 脚本时出现问题
【发布时间】:2020-06-22 20:02:58
【问题描述】:

我正在编写一个整合的 SQL 脚本,需要

  1. 将名为 AdjudicatedDateTime 的日期时间列添加到 WarrantyAdjudicationStaging 表中。
  2. 为表中的新条目添加默认日期 GETDATE()
  3. 使用 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 语句。您可以将前两个块组合成一个语句...添加具有默认约束的列。语法很简单。

标签: sql-server tsql sql-scripts


【解决方案1】:

在语句后添加 GO 以分批拆分它们

【讨论】:

  • 请注意,根据发送语句GO 的内容,可能会导致更多错误。 GO 不是 Transact-SQL 关键字,它是 IDE 关键字,由 SSMS 和 Azure Data Studio 等应用程序以及 sqlcmdsqlcli 等 CLI 使用。
猜你喜欢
  • 2020-09-07
  • 2010-11-28
  • 1970-01-01
  • 1970-01-01
  • 2019-09-21
  • 1970-01-01
  • 2011-08-31
  • 2020-08-09
  • 1970-01-01
相关资源
最近更新 更多