尝试在现有表

时间:2016-10-24 00:07:06

标签: sql sql-server

当尝试引用/访问新添加的列到现有(或不是?)表时,我总是得到编辑器错误并且大部分时间执行错误(大多数!=总是,甚至更奇怪)。

请考虑以下事项:

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)可以确保触发此查询? (我不在乎编辑错误)。

1 个答案:

答案 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