1

我相当确定我无法通过 Google 找到答案的很大一部分原因是我不知道描述我的问题的正确术语。

我很了解以下表格:

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 数据库。

4

2 回答 2

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);
于 2012-10-25T18:42:17.230 回答
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);
于 2012-10-25T18:40:39.793 回答