Получение результата динамического SQL в переменную для sql-сервера

Выполнение динамического SQL следующим образом в хранимой процедуре:

DECLARE @sqlCommand nvarchar(1000)
DECLARE @city varchar(75)
SET @city = 'London'
SET @sqlCommand = 'SELECT COUNT(*) FROM customers WHERE City = @city'
EXECUTE sp_executesql @sqlCommand, N'@city nvarchar(75)', @city = @city

Как использовать значение столбца count (*) в качестве возвращаемого значения в SP?


person Peter Lindholm    schedule 01.10.2010    source источник


Ответы (6)


динамическая версия

    ALTER PROCEDURE [dbo].[ReseedTableIdentityCol](@p_table varchar(max))-- RETURNS int
    AS
    BEGIN
        -- Declare the return variable here
       DECLARE @sqlCommand nvarchar(1000)
       DECLARE @maxVal INT
       set @sqlCommand = 'SELECT @maxVal = ISNULL(max(ID),0)+1 from '+@p_table
       EXECUTE sp_executesql @sqlCommand, N'@maxVal int OUTPUT',@maxVal=@maxVal OUTPUT
       DBCC CHECKIDENT(@p_table, RESEED, @maxVal)
    END


exec dbo.ReseedTableIdentityCol @p_table='Junk'
person Ab Bennett    schedule 21.10.2016

Вы, наверное, пробовали это, но ваши спецификации позволяют это сделать?

DECLARE @city varchar(75)
DECLARE @count INT
SET @city = 'London'
SELECT @count = COUNT(*) FROM customers WHERE City = @city
person Brad    schedule 01.10.2010

это могло быть решением?

declare @step2cmd nvarchar(200)
DECLARE @rcount NUMERIC(18,0)   
set @step2cmd = 'select count(*) from uat.ap.ztscm_protocollo' --+ @nometab
EXECUTE @rcount=sp_executesql @step2cmd
select @rcount
person Stefano Pedone    schedule 04.05.2017

person    schedule
comment
Спасибо. Ключевое слово OUTPUT в N '@ city nvarchar (75), @ cnt int OUTPUT' было тем, чего мне не хватало. - person Peter Lindholm; 01.10.2010
comment
Нет ли решения, которое не требует добавления выходной переменной в динамический оператор ??? - person Tab Alleman; 20.12.2016

person    schedule
comment
Думаю, твой ответ оборвался. - person Sage; 01.10.2010
comment
Сообщение 137, Must declare the scalar variable "@cnt". Сообщение 178, A RETURN statement with a return value cannot be used in this context.. Хорошая работа, братан)) - person it3xl; 19.08.2018

person    schedule
comment
Это не относится к серверу sql. - person Robert Lujo; 23.05.2015