Sql 将变量和列指定给值

Sql 将变量和列指定给值,sql,sql-server,tsql,Sql,Sql Server,Tsql,我正在将存储过程从SQL Server转换为MySQL,遇到了一个让我困惑的查询: UPDATE T_Example SET @ExampleVar = ExampleColumn = 0 WHERE ExampleColumn2 = @ExampleVar2; 为了安全起见,我修改了变量的名称,但语法是相同的 我从未见过这种类型的传递性赋值,我对这种行为感到困惑 是背景吗 @ExampleVar = 0 AND setting ExampleColumn = 0 @ExampleVar

我正在将存储过程从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
或者说,这是一个背景

@ExampleVar = 0 AND setting ExampleColumn = 0
@ExampleVar = ExampleColumn, THEN setting ExampleColumn = 0
如果是前者,那么我假设最简单的解决方案是在
更新之后检查
行计数()
,如果是
>0
,那么我将变量分配给
If
块中的
0
。(不漂亮,但我认为这是最优雅的解决方案。)

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

SQL Server非常清楚分配的含义:

SET@variable=column=expression
将变量设置为相同 值作为列。这与
SET@variable=column,column不同
=表达式,将变量设置为列的更新前值

因此,等效的MySQL语句是

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

注意语句中使用的
:=

虽然您的查询在技术上可行,但我注意到它在存储过程中不起作用。我不明白为什么会出现这种情况,但如果我在存储过程中复制完全相同的查询,它就不起作用。在程序之外,它运行正常。@B.Roth。也许你应该问另一个问题。这在存储过程中显然不起作用,这是没有道理的。我想出来了,区别在于@ExampleVar变量。在存储过程中,我没有将其用作会话变量,而是用作过程变量。显然,过程变量不适用于这种类型的查询,但会话变量适用。