我有我們的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'
是否有這樣做的兩個更新上一個單獨的語句的可能性
我有我們的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'
是否有這樣做的兩個更新上一個單獨的語句的可能性
你可以結合它是這樣的:
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')
沒有什麼好處,但它現在作爲一個原子操作運行,並且不需要外部事務。
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')
這將更新每條記錄。 – HLGEM
雖然這會給你正確的結果,但如果表格有100,000,000行,它也可能導致大規模操作。 – dfundako
我同意,這是爲了證明它是如何實現的。我發佈之前添加註釋與where子句(仍然發現我的方式周圍的計算器:)) – user7415753
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')
聲音就像case語句 –
你是不是想減少代碼?看到性能問題? – dfundako
@dfundako我是新來的SQL服務器和查詢,我可以做他們分開,但不知道只是一個聲明可以做到這兩個 – trx