在存储过程中查找项目数

时间:2019-05-06 15:47:23

标签: sql-server stored-procedures

我想查找col_name的空数。我在SSMS中使用以下代码:

DECLARE @NumNull INT = N'SELECT COUNT(*) FROM ' + @WhichTable + N' WHERE col_name IS NULL'

在程序开始时,我已将@WhichTable声明为NVARCHAR(MAX)。

我收到此错误消息:

  

第245条消息,状态16,状态1,过程sp_FILL_CHAIN_NAMES,第22行
  将nvarchar值'SELECT UNITED_ALL WHERE col_name IS NULL的SELECT COUNT(*)转换为数据类型int时,转换失败。

我不确定如何重写此SQL代码?我尝试了exec(),甚至尝试了SQL,但似乎无法正常工作!

2 个答案:

答案 0 :(得分:2)

您试图将整个SELECT语句存储在一个int变量中,而不是选择结果。

您需要:

  1. 将您的SQL存储在NVARCHAR变量中。
  2. 使用sp_executesql来执行它。

那里提供了一个很好的示例: https://support.microsoft.com/en-us/help/262499/how-to-specify-output-parameters-when-you-use-the-sp-executesql-stored

答案 1 :(得分:1)

您需要使用sp_executesql从动态sql分配结果

DECLARE @WhichTable nvarchar(max)= 'Categories'
declare @NumNull int 
DECLARE @sql nvarchar(max)

Set @sql = 'SELECT @NumNull = COUNT(*) FROM ' + @WhichTable + ' WHERE CategoryId IS NOT NULL';
execute sp_executesql 
    @sql, 
    N'@NumNull int OUTPUT', 
    @NumNull = @NumNull output;
select @NumNull;