2012-10-25 57 views
1

我相當肯定的,我無法找到與谷歌答案很大一部分原因是因爲我不知道正確的術語來描述我的問題。如何使用「匿名錶」對參數化更新進行參數化?

我知道下面的表格以及:

UPDATE Table t 
SET t.description = Concat(ot.text, ' text') 
FROM Table 
INNER JOIN Other_Table ot ON t.id = ot.id 
WHERE conditions; 

我試圖做到的是更喜歡:

UPDATE Table t 
SET t.description = Concat(item, ' text') 
FROM t 
INNER JOIN (SELECT item FROM ('list', 'of', 'items')) 
WHERE conditions; 

換句話說,我有一個「匿名錶」,或列表在查詢中指定的顯式字符串,而不是存儲在表中,我希望它們一次選取一個,並與某些字符串字面值連接並更新一行。

所以,想象我有一個產品信息表。我想這樣的「說明」列包含更新這個表「該產品是顏色!」。我在尋找類似:

UPDATE Products p 
SET p.desc = Concat('This product is ', color, '!') 
FROM p 
INNER JOIN (SELECT color FROM ('blue', 'red', 'green')) 
WHERE p.sku in (111, 112, 113); 

我使用Access 2010和連接到SQL Server 2008數據庫。

+0

請問111 =藍等?如果不是,你如何決定顏色? BTW的毗連在MS Access是與簡單:'[現場]「藍色」' – Fionnuala

+0

就是爲什麼我需要幫助,這一個 – burfl

回答

2

SQL Server 2008中允許使用VALUES子句爲表源水木清華:

CREATE TABLE products([desc] NVARCHAR(MAX),sku int) 


UPDATE p 
SET p.[desc] = 'This product is '+ C.color+ '!' 
FROM Products p 
INNER JOIN (VALUES(111,'blue'),(112, 'red'),(113, 'green')) AS c(sku,color) 
ON p.sku = c.sku 
WHERE p.sku in (111, 112, 113); 
+0

我喜歡這個了很多,謝謝塞巴斯蒂安。 「值(111,'blue'),(112,'red'),(113,'green')」中的括號是否正確? – burfl

+0

我真的很討厭'values'語法,但是這個看起來不錯。謝謝 –

+0

是的,所有的括號都是必須的。 –

1

我不知道我得到了你的權利,但嘗試這樣

update Products p set 
    p.desc = Concat('This product is ', C.color, '!') 
from p 
    inner join 
    (
     select 'blue' as color, 111 as id union all 
     select 'red' as color, 112 as id union all 
     select 'green' as color, 113 as id 
    ) as C on C.id = p.sku 
where p.sku in (111, 112, 113); 
+0

不太一樣緊湊我所希望的,但是這看起來像它會做什麼我」米問。謝謝您的幫助! – burfl

+0

另外,如果我不喜歡的東西將它的工作:內部連接(選擇( '藍', '紅', '綠')顏色,(111,112,113)的ID)? – burfl

+0

沒有,它會給你兩行三列(爲nvarchar我想),而不是三行兩列 –