用于计算表中行的动态sql会产生意外结果

时间:2015-10-22 16:02:13

标签: sql-server

执行这段代码时,我返回NULL。你能帮我理解它有什么问题吗?它基本上用于使用动态sql语句计算表中的行。非常感谢提前。

DECLARE @sql    nvarchar(4000),
@code    nvarchar(40),
@count    int,
@params nvarchar(4000)

SELECT @sql =  N' SELECT @cnt = COUNT(*) FROM   [Table1] WHERE [Column1]='''+quotename(@code)
   SELECT @params = N'@code nvarchar(40), ' +
                    N'@cnt      int      OUTPUT'
   EXEC sp_executesql @sql, @params, 'AD', @cnt = @count OUTPUT

SELECT @count as x
select @sql as y

如果您需要其他详细信息,请告诉我们。感谢指针/帮助。 PS。我已手动测试过,计数超过1。

1 个答案:

答案 0 :(得分:2)

将参数(@code)作为参数传递给sp_executesql是一种很好的做法:

CREATE TABLE #Table1 (Column1 NVARCHAR(100));
INSERT INTO #Table1(Column1) VALUES ('AD'), ('AD');

DECLARE @sql     NVARCHAR(MAX),
        @code    NVARCHAR(40),
        @count   INT,
        @params  NVARCHAR(4000);

SELECT @sql =  N'SELECT @cnt = COUNT(*) 
                 FROM #Table1 
                 WHERE [Column1]= @code;'
      ,@params = N'@code NVARCHAR(40), 
                   @cnt  INT OUTPUT';

EXEC [dbo].[sp_executesql] 
       @sql
      ,@params 
      ,@code = 'AD'
      ,@cnt = @count OUTPUT;

SELECT @count AS x;

LiveDemo