我必须添加 Not Nullable 列,但我没有默认的已知值,因此我将列创建为 Nullable ,之后我更新了所有行然后将列更改为 Not Nullable 。
运行以下脚本已成功完成。
BEGIN
ALTER TABLE driver ADD DriverLocationId INT NULL
EXEC('UPDATE driver
SET DriverLocationId = (SELECT TOP(1) CountryId FROM Country WHERE CountryCode IN (''USA'',''CAN'', ''MEX''))')
ALTER TABLE driver ALTER COLUMN DriverLocationId INT NOT NULL
END
以下是失败的。
BEGIN
ALTER TABLE driver ADD DriverLocationId INT NULL
UPDATE driver
SET DriverLocationId = (SELECT TOP(1) CountryId FROM Country WHERE CountryCode IN ('USA','CAN', 'MEX'))
ALTER TABLE driver ALTER COLUMN DriverLocationId INT NOT NULL
END
可能在更改后第1次尝试的更新脚本正确执行时。
你对此有任何解释吗?
编辑:我已更新了我的问题。对不起双引号。那不是问题。这是更复杂的事情。
编辑:错误是:
列名称'DriverLocationId'无效。
编辑(对于@Stephan): GO无效
答案 0 :(得分:3)
首先:删除“美国”的额外单引号,然后使用“美国”代替。当然,其他值也是如此。
然后,正如我在评论中所说:在第二种情况下,SQL还没有看到该列已被添加。上面提到的GO语句可以使其工作,但在此代码中不起作用,因为它位于BEGIN和END标记之间。我相信EXEC在新会话中执行该语句,因此不受此问题的阻碍。