Сохранить результат строкового запроса в переменной в sql-сервере

У меня есть этот запрос (это один фрагмент моего запроса)

DECLARE @Count varchar(max)
SET @Count = ('SELECT TOP 1 COUNT(Id) FROM ' + QUOTENAME(@Tbl))
EXEC (@Count)
DECLARE @CalRemainPage int = convert(int, @Count ) - (3 * 15)

и когда я запускаю свой запрос, я получаю эту ошибку из этого фрагмента

Ошибка конверсии при преобразовании значения varchar 'SELECT TOP 1 COUNT (Id) FROM [Sample_Work]' в тип данных int.

Я знаю, что моя проблема - результат @count, поместите строку @count вместо результата этого

DECLARE @CalRemainPage int = convert(int, @Count ) - (3 * 15)

Как сохранить результат запроса @count и использовать @count в другом месте, таком как верхний образец?

спасибо

1 ответ

Это неправильный способ сделать это. Вместо Exec используйте SP_executesql для выполнения динамического SQL.

В SP_executesql вы можете объявить переменную как OUTPUT parameter и вы можете использовать ее вне динамического запроса. Попробуйте что-то вроде этого.

DECLARE @Count INT, @Tbl VARCHAR(20)='jointest', @sql NVARCHAR(max)
SET @sql = ( 'SELECT TOP 1 @Count= COUNT(ID) FROM '+ Quotename(@Tbl) )
EXEC Sp_executesql @sql, N'@Count int output', @count output
DECLARE @CalRemainPage INT= @Count - ( 3 * 15 )

licensed under cc by-sa 3.0 with attribution.