将动态SQL的结果转换为sql-server的变量

Pet*_*olm 111 sql t-sql sql-server sql-server-2005 dynamic-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
Run Code Online (Sandbox Code Playgroud)

如何将count(*)列值用作SP中的返回值?

Sag*_*age 189

DECLARE @sqlCommand nvarchar(1000)
DECLARE @city varchar(75)
declare @counts int
SET @city = 'New York'
SET @sqlCommand = 'SELECT @cnt=COUNT(*) FROM customers WHERE City = @city'
EXECUTE sp_executesql @sqlCommand, N'@city nvarchar(75),@cnt int OUTPUT', @city = @city, @cnt=@counts OUTPUT
select @counts as Counts
Run Code Online (Sandbox Code Playgroud)

  • +1:你打败了我,需要声明一个变量,并将其标记为OUTPUT.[有关SQL Server动态SQL的更多信息和推荐读物,请参阅动态SQL的诅咒和祝福](http://www.sommarskog.se/dynamic_sql.html#sp_executesql) (3认同)

Ab *_*ett 5

动态版

    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'
Run Code Online (Sandbox Code Playgroud)