1

我有一个大型 T-SQL 脚本,可以打开和关闭一些事务。我已经读过使用 GO 语句提交批处理可以有效地清除其范围内的所有变量。

鉴于下面的脚本,在提交事务后是否会定义 @MyImportantVariable?

这是一个问题,如果是,我该如何克服它?

DECLARE @MyImportantVariable INT;
SET @MyImportantVariable = 42;

DECLARE @Counter INT;
SET @Counter = 0

DECLARE UpdateGarmentCursor CURSOR FAST_FORWARD
FOR
SELECT
        MyColumn
    FROM
        MyWonderfulTable

BEGIN TRANSACTION
    WHILE @@TRAN_STATUS = 0 
    BEGIN
        -- Do interesting work in here
    SET @Counter = @Counter +1
    IF(@Counter>10) 
    BEGIN
        COMMIT TRANSACTION
            -- What happens here to @MyImportantVariable?
           SET @Counter = 0
        BEGIN TRANSACTION
    END
END

-- Close the transaction one last time
COMMIT TRANSACTION
4

1 回答 1

2

该变量仍将存在。

您的示例不包含GO命令,仅包含事务。

GO表示批次的结束……批次和交易完全是两个不同的东西。

来自 MSDN

GO 不是 Transact-SQL 语句;它是 sqlcmd 和 osql 实用程序以及 SQL Server Management Studio 代码编辑器识别的命令。

SQL Server 实用程序将 GO 解释为它们应该将当前批次的 Transact-SQL 语句发送到 SQL Server 实例的信号。当前批次的语句由自上次 GO 或自特别会话或脚本开始(如果这是第一个 GO)以来输入的所有语句组成。

于 2012-11-08T22:35:11.303 回答