我想查找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,但似乎无法正常工作!
答案 0 :(得分:2)
您试图将整个SELECT语句存储在一个int变量中,而不是选择结果。
您需要:
那里提供了一个很好的示例: 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;