2
CREATE TABLE #TempProducts (
    Id uniqueidentifier,
    ManufacturerId uniqueidentifier,
    Number varchar(50),
    PresentId uniqueidentifier null)

如何更新 PresentId 字段?我对此有不同的错误:

1) 数据库中已有一个名为“#TempProducts”的对象。

UPDATE #TempProducts
SET #TempProducts.PresentId = p.Id
FROM #TempProducts JOIN Products p ON (#TempProducts.ManufacturerId = p.ManufacturerId AND #TempProducts.Number = p.Number)
WHERE #TempProducts.Id <> p.Id

2) 多部分标识符“t.PresentId”无法绑定。

UPDATE #TempProducts
SET t.PresentId = p.Id
FROM #TempProducts t JOIN Products p ON (t.ManufacturerId = p.ManufacturerId AND t.Number = p.Number)
WHERE t.Id <> p.Id
4

4 回答 4

5

对于第二个错误,请尝试:

UPDATE t
SET t.PresentId = p.Id
FROM #TempProducts t JOIN Products p ON (t.ManufacturerId = p.ManufacturerId AND t.Number = p.Number)
WHERE t.Id <> p.Id
于 2013-04-08T07:15:54.993 回答
2

对于问题 1:(在CREATE TABLE语法之前)

if object_id(tempdb..#TempProducts) is not null
begin
    drop table #TempProducts 
end

对于问题 2,我认为@techdo是正确的。

UPDATE t
SET t.PresentId = p.Id
FROM #TempProducts t JOIN Products p 
ON (t.ManufacturerId = p.ManufacturerId AND t.Number = p.Number)
WHERE t.Id <> p.Id
于 2013-04-08T07:21:40.990 回答
2
UPDATE t
SET t.PresentId = p.Id
FROM #TempProducts t JOIN Products p ON (t.ManufacturerId = p.ManufacturerId AND t.Number = p.Number)
WHERE t.Id <> p.Id

这将修复第二个错误(UPDATE t 而不是 UPDATE #TempProducts)。但是,第一个查询不可能产生上述错误。

我猜你正在再次执行你的 CREATE TABLE 查询,这会产生错误,因为临时表已经存在。

您应该在创建临时表时使用这样的检查:

IF (OBJECT_ID('tempdb..#TempProducts') IS NOT NULL) DROP TABLE #TempProducts
CREATE TABLE #TempProducts (
    Id uniqueidentifier,
    ManufacturerId uniqueidentifier,
    Number varchar(50),
    PresentId uniqueidentifier null)
于 2013-04-08T07:22:48.453 回答
1

由于代表限制无法发表评论,但 IF (OBJECT_ID('tempdb..#TempProducts') IS NOT NULL) DROP TABLE #TempProducts"在 SQL Server 2012 或更高版本中不再需要。您现在可以使用更简单的DROP TABLE IF EXISTS #TempProducts语法。

于 2020-07-21T19:31:02.963 回答