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句を導入するとすぐに、設定できる値は1つだけのようです。
私は何が間違っているのですか?
ありがとう、Thys
ここでは、where句ではなくcase式を使用する必要があります。where句はクエリの行をフィルタリングすることに注意してください。そこにあるものの構文について少し混乱していると思います。このタイプの更新は次のようになります。
UPDATE cte_name
SET VarValue = case when VarName IN('Wilma', 'Barney') then 'Fred' else VarName end
, VarValueNext = case when VarValue IN('Wilma', 'Barney') then 'Pebbles' else VarValueNext end
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加