Transact-SQL中,即使重新宣告,迴圈中的資料表變數也不會清空

這是我在debug時發現的。假設以下SQL:

DECLARE @i int;
set @i=0;

WHILE @i < 10
BEGIN
    DECLARE @t TABLE ( No int );
    INSERT @t ( No ) VALUES ( @i );

    IF @i = 9
    BEGIN
        SELECT * FROM @t;
    END

    SET @i = @i+1;
END

就寫程式的思維,最後的輸出結果應該是只有一筆No為9的資料,但實際執行結果卻會有10筆資料。

No
———–
0
1
2
3
4
5
6
7
8
9

所以,在迴圈內,一開始記得要清空資料表變數的內容,才不會得到詭異的結果。如下:

DECLARE @i int;
set @i=0;

WHILE @i < 10
BEGIN
    DECLARE @t TABLE ( No int );
    DELETE FROM @t;

    INSERT @t ( No ) VALUES ( @i );

    IF @i = 9
    BEGIN
        SELECT * FROM @t;
    END

    SET @i = @i+1;
END
廣告

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com 標誌

您的留言將使用 WordPress.com 帳號。 登出 /  變更 )

Google+ photo

您的留言將使用 Google+ 帳號。 登出 /  變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 /  變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 /  變更 )

連結到 %s