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;

言い換えれば、「匿名テーブル」、またはテーブルに格納するのではなく、クエリで指定された明示的な文字列のリストがあり、それらを一度に1つずつ選択して、文字列リテラルと連結し、更新する必要があります行。

製品情報のテーブルがあるとします。この表を更新して、「説明」列に「この商品はカラーです!」が含まれるようにします。私は次のようなものを探しています:

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 DB に接続しています。

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 に答える