当尝试引用/访问新添加的列到现有(或不是?)表时,我总是得到编辑器错误并且大部分时间执行错误(大多数!=总是,甚至更奇怪)。
请考虑以下事项:
ALTER TABLE Products
ADD TotalSales INT NOT NULL
CONSTRAINT Def DEFAULT 0
UPDATE P
SET P.TotalSales = TEMP.TotalSalesComputed
FROM Products P
JOIN
(SELECT ProductID, SUM(OD.Quantity) TotalSalesComputed
FROM [Order Details] OD
GROUP BY ProductID) TEMP ON P.ProductID = TEMP.ProductID
现在,编辑说:
无效的列名称' TotalSales'。
执行时:
Msg 207,Level 16,State 1,Line 151
列名称无效' TotalSales'。
哪一样。
更糟糕的是,即使我在编辑器中出现错误 - SOMETIMES(截至目前 - 随机)查询成功(它做了它应该做的事情)。
我尝试了智能感知缓存清理,然后是一些EXEC的东西,读了一些关于类似问题的东西 - 但没有。
人们在运行它之前说出有关SQL Server编译脚本的内容并有效地检测"无效列"错误而不是实际触发查询。
是否有一些命令(如EXEC one)可以确保触发此查询? (我不在乎编辑错误)。
答案 0 :(得分:3)
Just Put
GO
进入两个查询。
Go is Signals批次结束。
所以您的查询将如下所示
ALTER TABLE Products ADD TotalSales INT NOT NULL CONSTRAINT Def DEFAULT 0
Go -- added
UPDATE P
SET P.TotalSales = TEMP.TotalSalesComputed
FROM Products P
JOIN
(
SELECT ProductID, SUM(OD.Quantity) TotalSalesComputed
FROM [Order Details] OD
GROUP BY ProductID
) TEMP
ON P.ProductID = TEMP.ProductID
Referance:https://msdn.microsoft.com/en-us/library/ms188037.aspx