Нахождение количества элементов в хранимой процедуре - PullRequest
0 голосов
/ 06 мая 2019

Я хочу найти количество нулей для 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 * ​​1010 * Преобразование завершилось неудачно при преобразовании значения nvarchar «ВЫБОР СЧЕТА (*) ИЗ UNION_ALL ГДЕ col_name IS NULL» в тип данных int.

Я не уверен, как переписать этот код SQL?Я пытался exec(), и даже SQL, но он не работает!

Ответы [ 2 ]

2 голосов
/ 06 мая 2019

Вы пытаетесь сохранить весь оператор 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 голос
/ 06 мая 2019

Вам нужно использовать 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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...