以下查询是一个人为的示例,演示了本周在存储过程中发现的错误。SQL查询中的执行顺序?
CREATE TABLE #temp
(
ID int IDENTITY(1,1),
Value char(1)
)
INSERT INTO #temp(Value) Values('a')
INSERT INTO #temp(Value) Values('b')
INSERT INTO #temp(Value) Values('c')
INSERT INTO #temp(Value) Values('d')
DECLARE
@i int,
@ID int,
@Count int,
@Value char(1)
SELECT @Count = COUNT(*) FROM #temp
SET @i = 1
SET @ID = 2
WHILE @i < @Count
BEGIN
SELECT
@ID = ID,
@Value = (SELECT Value FROM #temp WHERE ID = @ID)
FROM
#temp
WHERE
@i = ID
PRINT @Value
SET @i = @i + 1
END
乍一看输出应该是a b c d
但它不是!这是b b c d
。所以声明中的执行顺序并不是我们可能认为的那样。
是否存在可依赖的特定执行顺序?
你给出的查询的输出是B A B – Kashif 2010-07-17 10:25:22
是的,你是对的,但因为每个人都在自己的答案已经发表了评论我现在不会改变。 :) – 2010-07-17 10:55:47