我正在将存储过程从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
如果是前者,那么我认为最简单的解决方案是检查ROW_COUNT()
之后的UPDATE
,如果是> 0
那么我将变量分配给0
一个IF
块。 (不漂亮,但我认为这是最优雅的解决方案。)
如果是后者,那么我不确定如何处理它,所以那里的建议会有所帮助。
答案 0 :(得分:1)
SQL Server documentation对分配的含义非常清楚:
SET @variable = column = expression
将变量设置为相同 值作为列。这与SET @variable = column, column = expression
不同,UPDATE T_Example SET ExampleColumn = (@ExampleVar := 0) WHERE ExampleColumn2 = @ExampleVar2;
将变量设置为列的更新前值。
因此,等效的MySQL语句是
:=
请注意在声明中使用login_user
。