【问题标题】:Populate temp variable within stored procedure using dynamic sql使用动态 sql 在存储过程中填充临时变量
【发布时间】:2014-02-27 12:02:22
【问题描述】:

我有一个存储过程,我在其中声明了一个需要使用动态 sql 填充的 int 变量

CREATE PROCEDURE USP_aTABLE_ADD
/*

    stored procedure variables

*/
AS

     DECLARE @count int
     SET @count = 1
     DECLARE @qry nvarchar(max)

/*
     SET UP @qry which will look like this
     SELECT @count = count(*) FROM aTABLE WHERE (col1 = 'val1' AND col2 = 'val2'...)
*/


/*
     How to get the value of @count so that I can continue with add process
*/

IF @count = 0
BEGIN
   /*add logic*/
END

【问题讨论】:

  • 看起来你已经在@count中选择了count(*)的值,那有什么问题呢?

标签: sql sql-server sql-server-2008 stored-procedures


【解决方案1】:

使用sp_executeSQL 和一个输出参数:

DECLARE @count INT = 1
DECLARE @qry   NVARCHAR(MAX)

SET @qry = N'set @count = (....)'

EXEC sp_executesql @qry, N'@count INT OUTPUT', @count OUTPUT
    
SELECT @count

【讨论】:

    【解决方案2】:

    您可以尝试使用这样的临时表

    DECLARE @tmp TABLE(cnt INT)
    DECLARE @qry nvarchar(max)
    
    -- Insert the count returned by dynamic SQL into temp table
    SET @qry = 'SELECT COUNT(*) FROM Table WHERE condition'
    INSERT INTO @tmp EXEC(@qry)
    
    DECLARE @count INT
    SET @count = (SELECT TOP 1 cnd FROM @tmp)
    

    【讨论】:

      猜你喜欢
      • 2012-08-04
      • 1970-01-01
      • 2013-09-01
      • 2015-12-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多