Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何使用";参数化更新;匿名表;?_Sql_Sql Server_Ms Access - Fatal编程技术网

Sql 如何使用";参数化更新;匿名表;?

Sql 如何使用";参数化更新;匿名表;?,sql,sql-server,ms-access,Sql,Sql Server,Ms Access,我相当肯定,我无法通过谷歌找到答案的很大一部分原因是因为我不知道正确的术语来描述我的问题 我很熟悉以下表格: 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, ' te

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

我很熟悉以下表格:

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

我不确定是否正确,但请尝试这样的smth

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);

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);

111=蓝色等吗?如果没有,你如何决定颜色?顺便说一句,MS Access中的Concat非常简单,如&:
[Field]&“Blue”
这正是我需要帮助的原因,它并不像我希望的那样紧凑,但它似乎可以满足我的要求。谢谢你的帮助!另外,如果我做了一些类似的事情:内部连接(选择('blue','red','green')作为颜色,(111,112,113)作为id吗?不,它会给你两行三列(我想是nvarchar),而不是像这样的三行两列,谢谢塞巴斯蒂安。“Values(111,'blue'),(112,'red'),(113,'green')”中的括号正确吗?我真的很讨厌
语法,但这个看起来不错。非常感谢。