为变量和列分配值

时间:2016-02-27 01:53:11

标签: sql sql-server tsql

我正在将存储过程从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块。 (不漂亮,但我认为这是最优雅的解决方案。)

如果是后者,那么我不确定如何处理它,所以那里的建议会有所帮助。

1 个答案:

答案 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