2017-01-13 108 views
1

我有我們的SQL服務器上運行兩個UPDATE語句它們就像兩個更新上一條語句

UPDATE dbo.c_Account 
SET Ct = Ct-1 
Where 
Acc = 'IT' OR Acc = 'gt' 

UPDATE dbo.c_Account 
SET Ct = Ct-3 
Where 
Acc = 'ABC' 

是否有這樣做的兩個更新上一個單獨的語句的可能性

+1

聲音就像case語句 –

+0

你是不是想減少代碼?看到性能問題? – dfundako

+0

@dfundako我是新來的SQL服務器和查詢,我可以做他們分開,但不知道只是一個聲明可以做到這兩個 – trx

回答

8

你可以結合它是這樣的:

UPDATE t SET 
    Ct = Ct - CASE WHEN t.Acc IN ('IT','gt') THEN 1 ELSE 3 END 
FROM dbo.c_Account t 
WHERE t.Acc IN ('IT','gt','ABC') 

沒有什麼好處,但它現在作爲一個原子操作運行,並且不需要外部事務。

0
UPDATE dbo.c_Account 
SET Ct = case 
when (Acc = 'IT' OR Acc = 'gt') then Ct-1 
When Acc = 'ABC' then Ct-3 
Else ct 
End 

上面會更新所有記錄,默認值不變。你可以添加一個where語句來更新你需要的語句,例如 凡在ACC( 'IT', 'GT', 'ABC')

+1

這將更新每條記錄。 – HLGEM

+1

雖然這會給你正確的結果,但如果表格有100,000,000行,它也可能導致大規模操作。 – dfundako

+0

我同意,這是爲了證明它是如何實現的。我發佈之前添加註釋與where子句(仍然發現我的方式周圍的計算器:)) – user7415753

1
 UPDATE dbo.c_Account 
    SET Ct = case Acc when 'IT' then (Ct-1) 
    when 'GT' then ct-1 
    when 'abc' then ct-3 
    else ct 
    end 

    WHERE t.Acc IN ('IT','gt','ABC') 
+0

非常感謝糾正... –

+0

我會得到這個答案的積分? –

+0

當您的答案獲得投票時,您可以獲得積分,或被髮布問題的人員標記爲接受的答案。 – dfundako