Назначить результат динамического оператора sql, содержащего COALESCE, переменной

У меня есть динамический оператор SQL, созданный с использованием COALESCE. Мне нужно, чтобы результат выполнения этого динамического оператора sql был назначен переменной. Я попробовал следующий код, но он не назначает вывод переменной @result. Когда выполнение завершается, exec отображает правильный результат, но вывод «выбрать @result» всегда равен NULL.

DECLARE @SQL NVARCHAR(MAX)
DECLARE @result int  


SELECT   @SQL = COALESCE('select '+ @SQL + CHAR(13) + ' + ' + CHAR(13),'' ) 
                       +
                       '(SELECT case when count(distinct ' + convert(varchar(10),object_id) + ' ) > 0 then 1 else 0 end from sys.dm_db_index_usage_stats 
                         WHERE object_id = '+convert(varchar(10),object_id)
                         +'AND last_user_update > dateadd(minute, -1, getdate()) 
                         )'                         
FROM sys.dm_db_index_usage_stats
WHERE object_id in (object_id('table1'),object_id('table2'))
AND database_id = db_id(db_name())

EXEC sp_executesql @SQL, N'@result int output', @result out 

select @result

person Rashmi Shivanna    schedule 10.09.2018    source источник


Ответы (1)


Следующий код помог мне решить эту проблему.

DECLARE @SQL NVARCHAR(MAX)
DECLARE @result int  
DECLARE @parms nvarchar(1000)

SELECT   @SQL = COALESCE('select @cnt='+ @SQL + CHAR(13) + ' + ' + CHAR(13),'' ) 
                       +
                       '(SELECT case when count(distinct ' + convert(varchar(10),object_id) + ' ) > 0 then 1 else 0 end from sys.dm_db_index_usage_stats 
                         WHERE object_id = '+convert(varchar(10),object_id)
                         +'AND last_user_update > dateadd(minute, -1, getdate()) 
                        )'                          
FROM sys.dm_db_index_usage_stats
WHERE object_id in (object_id('table1'),object_id('table2'))
AND database_id = db_id(db_name())

SET @parms = N'@cnt int out'

EXEC sp_executesql @SQL, @parms, @cnt = @result out

select @result
person Rashmi Shivanna    schedule 11.09.2018