Sql 将变量和列指定给值
我正在将存储过程从SQL Server转换为MySQL,遇到了一个让我困惑的查询: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
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变量。在存储过程中,我没有将其用作会话变量,而是用作过程变量。显然,过程变量不适用于这种类型的查询,但会话变量适用。