【发布时间】:2017-06-20 22:48:45
【问题描述】:
IF OBJECT_ID('tempdb..#TempList') IS NOT NULL
DROP TABLE #TempList
CREATE TABLE #TempList (
VarName NVARCHAR(10) ,
VarValue NVARCHAR(10),
VarValueNext NVARCHAR(10)
)
INSERT INTO #TempList
VALUES ('Fred',NULL, NULL),
('Wilma',NULL, NULL),
('Barney',NULL, NULL),
('Betty',NULL, NULL)
;WITH cte_name AS (
SELECT *
FROM #TempList
)
UPDATE cte_name
SET cte_name.VarValue = 'Fred' WHERE cte_name.VarName = 'Wilma' OR cte_name.VarName = 'Barney'
-- , cte_name.VarValueNext = 'Pebbles' WHERE cte_name.VarValue = 'Fred' and cte_name.VarName = 'Wilma'
SELECT *
FROM #TempList
我知道这是一个简单的示例,不保证使用 CTE 构造。我正在尝试了解 UPDATE 块是如何受到影响的。
我想设置多个字段的值。一旦我引入 WHERE 子句,我似乎只能设置一个值。
我做错了什么?
谢谢, 你的
【问题讨论】:
-
这似乎是什么问题?,这就像你想要的那样运行
-
因为更新语句只能有一个 where 子句。在这种情况下,我认为您会想要使用 case 表达式。
-
@Lamak 他们正在谈论更新中的第二列(目前已被注释掉)。
-
@SeanLange 啊,是的,我现在明白了。答案正如你所说。它与使用
CTE无关,所以 op 似乎很困惑 -
添加预期结果。
标签: sql-server sql-update common-table-expression