相关疑难解决方法(0)

SQL UPDATE评估顺序

以下查询中的评估顺序是什么:

UPDATE tbl SET q = q + 1, p = q;
Run Code Online (Sandbox Code Playgroud)

也就是说,将"tbl"."p"被设置为qq + 1?此处的评估顺序是否受SQL标准的约束?

谢谢.

UPDATE

在考虑了Migs的回答之后,我对我能找到的所有数据库进行了一些测试.虽然我不知道标准是什么,但实施方式各不相同.

特定

CREATE TABLE tbl (p INT NOT NULL, q INT NOT NULL);
INSERT INTO tbl VALUES (1, 5);   -- p := 1, q := 5
UPDATE tbl SET q = q + 1, p = q;
Run Code Online (Sandbox Code Playgroud)

我发现的价值"p""q"分别为:

database           p   q
-----------------+---+---
Firebird 2.1.3   | 6 | 6  -- But see …
Run Code Online (Sandbox Code Playgroud)

sql evaluation operator-precedence sql-update

36
推荐指数
2
解决办法
4305
查看次数

使用SELECT在SQL Server变量赋值中执行的顺序

给出以下示例:

declare @i int
select @i = 1, @i = 2
select @i
Run Code Online (Sandbox Code Playgroud)

@i永远是2?

这是我能想到的最简单的例子,但我正在考虑使用它来交换变量中的值.我也相信这种赋值方法(select)不符合ANSI标准(无论多么有用),但在这种情况下并不真正关心可移植代码.

UPDATE

感谢@MichaelFredrickson,我们有@ MartinSmith的回答,并参考了MSDN.我现在正在努力解决本文档中的第二句话的确切含义(强调添加):

如果单个SELECT语句中有多个赋值子句,则SQL Server不保证表达式的计算顺序.请注意,只有在分配中有引用时才会显示效果.

然而,第一句话足以让我远离依赖这种行为.

sql t-sql sql-server variable-assignment operator-precedence

8
推荐指数
1
解决办法
1230
查看次数