Sql server 2008 SQL server事务中的变量持久性

Sql server 2008 SQL server事务中的变量持久性,sql-server-2008,tsql,Sql Server 2008,Tsql,我有一个大型的T-SQL脚本,可以打开和关闭一些事务。我已经读到,使用GO语句提交批处理可以有效地清除其作用域中的所有变量 根据下面的脚本,提交事务后是否会定义@MyImportantVariable 这是一个问题吗?如果是,我如何克服它 DECLARE @MyImportantVariable INT; SET @MyImportantVariable = 42; DECLARE @Counter INT; SET @Counter = 0 DECLARE UpdateGarmentCur

我有一个大型的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

变量仍然存在

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

GO
发出批次结束的信号。。。批处理和事务是完全不同的两件事

:

GO不是Transact-SQL语句;这是一个由用户识别的命令 sqlcmd和osql实用程序以及sqlserver管理工作室代码 编辑

SQL Server实用程序将GO解释为它们应该发送的信号 SQL实例的当前Transact-SQL语句批 服务器。当前一批语句由所有语句组成 自上次GO或自临时会话开始后输入,或 如果这是第一次尝试,请编写脚本