以下查詢是一個人爲的示例,演示了本週在存儲過程中發現的錯誤。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