2017-02-03 17 views
4
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ブロックがどのように影響を受けるかを理解しようとしています。WITH CTE UPDATE SET WITH WHERE breaks

いくつかのフィールドの値を設定したいと思います。 WHERE句を導入するとすぐに、私は1つの値しか設定できないように見えます。

私は間違っていますか?あなたがここにCASE式ではない句を使用する必要があります

おかげで、 タイス

+0

更新文は、単一のwhere句を持つことができるので、これはあなたが – Lamak

+1

にそれをしたいだけのように実行?問題のようです何。このような状況では、ケース式を使用したいと考えています。 –

+1

@Lamak彼らはアップデートの第2列についてコメントしています(これは現在コメントされています)。 –

答えて

3

。 where句はクエリの行をフィルタリングすることに注意してください。私はあなたがそこにあるものの構文について少し混乱していると思います。このタイプの更新がどのように見えるかは次のとおりです。 1句UPDATEあたり、ないあたりSET - 間違っていないよ場合

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 
+0

はい、ありがとうございます。助けてくれてありがとうございます:) ...混乱していましたが、このフォーラムのおかげでより良いものになりました! –

2

あなたはショーン・ランゲは私の誤りを指摘し、この

UPDATE #TempList 
SET VarValue = CASE 
        WHEN VarName IN ('Wilma', 'Barney') THEN 'Fred' 
        ELSE VarValue 
        END, 
     VarValueNext = CASE 
         WHEN VarValue IN ('Fred', 'Wilma') THEN 'Pebbles' 
         ELSE VarValueNext 
         END 
WHERE VarName IN ('Wilma', 'Barney') 
     OR VarValue IN ('Fred', 'Wilma') 
+0

はい、ありがとうございます。ヘルプをよろしくお願いいたします。 –

0

ようなものが必要。

完全性のために、ここでは動作する解決策があります。

ご協力いただきありがとうございます。何日か... ;-)

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 = 
       CASE 
        WHEN cte_name.VarName = 'Wilma' OR cte_name.VarName = 'Barney' 
        THEN 'Fred' 
       END 
     , cte_name.VarValueNext = 
       CASE 
        WHEN cte_name.VarName = 'Betty' OR cte_name.VarName = 'Wilma' 
        THEN 'Bosses' 
       END 
SELECT * 
    FROM #TempList