2016-02-27 71 views
2

我把從SQL Server存儲過程到MySQL和我遇到已經難倒我的查詢:分配一個變量和一個列的值

UPDATE T_Example 
SET @ExampleVar = ExampleColumn = 0 
WHERE ExampleColumn2 = @ExampleVar2; 

爲了安全起見,我已經改變了變量的名稱,但語法是相同的。

我從來沒有見過這種類型的傳遞賦值,我對這種行爲感到困惑。

是否設置

@ExampleVar = 0 AND setting ExampleColumn = 0 

,或者將其設置

@ExampleVar = ExampleColumn, THEN setting ExampleColumn = 0 

如果是前者,那麼我想最簡單的方法是檢查UPDATEROW_COUNT(),如果它是> 0然後我在IF塊內將變量分配給0。 (不漂亮,但我認爲這是最優雅的解決方案。)

如果是後者,那麼我不太確定如何接近它,所以建議會有幫助。

回答

1

SQL服務器documentation是分配的意思相當清楚的:

SET @variable = column = expression變量設置爲相同 值列。這與SET @variable = column, column = expression不同,後者將該變量設置爲該列的更新前值。

所以,等效MySQL的語句是

UPDATE T_Example 
    SET ExampleColumn = (@ExampleVar := 0) 
    WHERE ExampleColumn2 = @ExampleVar2; 

注意在語句中使用的:=

+0

儘管您的查詢在技術上有用,但我注意到它在存儲過程中不起作用。我無法弄清楚爲什麼會出現這種情況,但是如果我在存儲過程中複製完全相同的查詢,則不起作用。在程序之外,它的功能很好。 –

+0

@ B.Roth。 。 。也許你應該問另一個問題。沒有任何理由可以證明這在存儲過程中不起作用。 –

+0

我想通了,區別在於@ExampleVar變量。在存儲過程中,我沒有將它用作會話變量,而是將其用作過程變量。顯然,過程變量不適用於這種類型的查詢,但會話變量將會。 –