CREATE TABLE #TempProducts (
Id uniqueidentifier,
ManufacturerId uniqueidentifier,
Number varchar(50),
PresentId uniqueidentifier null)
如何更新当前ID字段?我在这方面有不同的错误:
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
对于第二个错误,请尝试:
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
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)
对于问题 1:(在创建表语法之前(
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
由于代表限制而无法发表评论,但是 SQL Server 2012 或更高版本不再需要IF (OBJECT_ID('tempdb..#TempProducts') IS NOT NULL) DROP TABLE #TempProducts"
。现在,您可以使用更简单的DROP TABLE IF EXISTS #TempProducts
语法。