2013-04-08 67 views
1
CREATE TABLE #TempProducts (
    Id uniqueidentifier, 
    ManufacturerId uniqueidentifier, 
    Number varchar(50), 
    PresentId uniqueidentifier null) 

如何更新PresentId字段?我在這裏有不同的錯誤:如何更新#temptable

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 

回答

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 
+0

不是我的downvote,但是這究竟是怎麼從例如1有什麼不同?使用表名而不是別名是很好的。 – 2013-04-08 07:17:11

+1

@JW :)沒關係。第二個查詢得到「多部分標識符」t.PresentId「無法綁定」。雖然我嘗試了elias't',但它起作用了(至少錯誤消失了)。 – TechDo 2013-04-08 07:18:58

+1

是的,你是對的。現在需要一些睡眠〜_〜 – 2013-04-08 07:20:06

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 
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噸代替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)