【发布时间】:2013-01-30 19:00:51
【问题描述】:
举个例子:
declare @i int
select @i = 1, @i = 2
select @i
@i 会一直是 2 吗?
这是我能想到的最简单的例子,但我正在考虑使用它来交换变量中的值。我也相信这种分配方法(选择)不符合 ANSI(但很有用),但在这种情况下并不真正关心是否有可移植代码。
更新
感谢@MichaelFredrickson,我们有@MartinSmith 的answer 并在此引用MSDN。我现在正在努力理解本文档中第二句话的确切含义(强调):
如果单个 SELECT 语句中有多个赋值子句,SQL Server 不保证表达式的计算顺序。 请注意,只有在分配之间存在引用时才能看到效果。
然而,第一句话足以让我远离依赖行为。
【问题讨论】:
-
不确定这是否在任何地方定义。我不会指望任何观察到的行为。
-
这正是我所害怕的,所以可能不会为了节省一些位置而将其投入生产。
-
剃掉一些 LOC 绝不是一个好的理由。让某些东西可靠地工作并使其可读胜过 LOC。
-
别担心,完全同意。不过还是很有趣。
标签: sql sql-server tsql variable-assignment operator-precedence