Sql 如何在游标内动态查询中为参数赋值

Sql 如何在游标内动态查询中为参数赋值,sql,tsql,sql-server-2012,Sql,Tsql,Sql Server 2012,我的问题在于EXEC,除了向@计数器添加值之外,所有工作都正常 如果我执行如下操作,则没有问题: EXEC('if exists(select * from '+ @table + ' where ' + @column + ' = ' + @someValue + ') print ''test'''); 如何向@计数器添加值?当我运行下面的代码时,我得到一个错误: 0附近的语法不正确 你可以用这个 CREATE PROCEDURE testSP AS BEGIN DECLARE t

我的问题在于
EXEC
,除了向
@计数器添加值之外,所有工作都正常

如果我执行如下操作,则没有问题:

EXEC('if exists(select * from '+ @table + ' where ' + @column + ' = ' + @someValue + ') print ''test''');
如何向
@计数器添加值
?当我运行下面的代码时,我得到一个错误:

0附近的语法不正确

你可以用这个

CREATE PROCEDURE testSP
AS
BEGIN
    DECLARE testCursor CURSOR;

    DECLARE @table NVARCHAR;
    DECLARE @column NVARCHAR;
    DECLARE @someValue NVARCHAR;
    ...

    BEGIN
        DECLARE testCursor2 CURSOR;
        DECLARE @counter INT = 0;
        ...

        BEGIN
            DECLARE @result INT = 0;

            declare @sqlText nvarchar(max)= N'if exists(select * from '+ @table + ' where ' + @column + ' = ' + @someValue + ') SET @counter = 1' 

            DECLARE @ParmDefinition nvarchar(500) = N'@counter INT OUTPUT'; 

            EXEC sp_executesql @sqlText, @ParmDefinition, @counter = @counter OUTPUT  ;
                if(@counter>0)
                    print 'test';
            ...
        END
    ...
    END
END
-您应该始终为您使用的任何
varchar
变量和参数提供长度
CREATE PROCEDURE testSP
AS
BEGIN
    DECLARE testCursor CURSOR;

    DECLARE @table NVARCHAR;
    DECLARE @column NVARCHAR;
    DECLARE @someValue NVARCHAR;
    ...

    BEGIN
        DECLARE testCursor2 CURSOR;
        DECLARE @counter INT = 0;
        ...

        BEGIN
            DECLARE @result INT = 0;

            declare @sqlText nvarchar(max)= N'if exists(select * from '+ @table + ' where ' + @column + ' = ' + @someValue + ') SET @counter = 1' 

            DECLARE @ParmDefinition nvarchar(500) = N'@counter INT OUTPUT'; 

            EXEC sp_executesql @sqlText, @ParmDefinition, @counter = @counter OUTPUT  ;
                if(@counter>0)
                    print 'test';
            ...
        END
    ...
    END
END