如何更新#temptable

时间:2013-04-08 07:10:12

标签: sql tsql temp-tables

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)多部分标识符&#34; t.PresentId&#34;无法受约束。

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

答案 0 :(得分: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

答案 1 :(得分:1)

对于问题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

答案 2 :(得分:1)

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)

答案 3 :(得分:1)

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