Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 为什么可以';在开始捕捉块/TSQL内分配一个值_Sql Server_Tsql - Fatal编程技术网

Sql server 为什么可以';在开始捕捉块/TSQL内分配一个值

Sql server 为什么可以';在开始捕捉块/TSQL内分配一个值,sql-server,tsql,Sql Server,Tsql,当我尝试为begin catch块内的变量赋值时。它说,无法评估: 我想收集所有这些记录的ID,并在流程结束时记录它们 OPEN FilesCursor; FETCH NEXT FROM FilesCursor INTO @recordId; WHILE @@FETCH_STATUS = 0 BEGIN BEGIN DISTRIBUTED TRANSACTION; BEGIN TRY SET XACT_ABORT ON;

当我尝试为begin catch块内的变量赋值时。它说,
无法评估

我想收集所有这些记录的ID,并在流程结束时记录它们

OPEN FilesCursor;
FETCH NEXT FROM FilesCursor INTO @recordId;
WHILE @@FETCH_STATUS = 0
BEGIN
    BEGIN DISTRIBUTED TRANSACTION;
        BEGIN TRY
            SET XACT_ABORT ON;
                SET @insertQuery = 'INSERT INTO '+ @remoteLinkedServerName +'.PatlatDB.dbo.TestTab...';

                SET @updateQuery = '...';

                EXECUTE(@insertQuery);
                EXECUTE(@updateQuery);
            SET XACT_ABORT OFF;
        END TRY
        BEGIN CATCH
            IF @@TRANCOUNT > 0
            BEGIN
                ROLLBACK TRANSACTION;
                SET @errorIds += ',' + CAST(@recordId AS VARCHAR);
                SET @errorMessage += '|' + CAST((SELECT ERROR_MESSAGE()) AS VARCHAR);
            END;
        END CATCH
        IF @@TRANCOUNT > 0
            COMMIT TRANSACTION;
FETCH NEXT FROM FilesCursor INTO @recordId;
END;
CLOSE FilesCursor;
DEALLOCATE FilesCursor;

您应该检查catch block.trusted中的
XACT_STATE
而不是
TRANCOUNT
。如果XACT_STATE()0,这也没有帮助,让我来指定值。注意,您启用了
XACT_ABORT
选项-如果要在catch块中检测活动事务,应该避免使用它。只要试着用
xact\u abort
注释行就可以了。我想收集值的真正障碍是使用未定义大小的
varchar
。对于
int
它需要10个符号。并查看如何声明
@errorIds
变量。它也是没有大小的varchar吗?首先,当我删除XACT_ABORT时,远程服务器返回一个错误。第二个,是的,声明@errorIds VARCHAR(MAX);您应该检查catch block.trusted中的
XACT_STATE
而不是
TRANCOUNT
。如果XACT_STATE()0,这也没有帮助,让我来指定值。注意,您启用了
XACT_ABORT
选项-如果要在catch块中检测活动事务,应该避免使用它。只要试着用
xact\u abort
注释行就可以了。我想收集值的真正障碍是使用未定义大小的
varchar
。对于
int
它需要10个符号。并查看如何声明
@errorIds
变量。它也是没有大小的varchar吗?首先,当我删除XACT_ABORT时,远程服务器返回一个错误。第二个,是的,声明@errorIds VARCHAR(MAX);