【问题标题】:Getting result of dynamic SQL into a variable for sql-server将动态 SQL 的结果放入 sql-server 的变量中
【发布时间】:2011-04-19 22:28:51
【问题描述】:

在存储过程中执行动态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

如何在 SP 中使用 count(*) 列值作为返回值?

【问题讨论】:

    标签: sql sql-server sql-server-2005 tsql dynamic-sql


    【解决方案1】:
    DECLARE @sqlCommand NVARCHAR(1000)
    DECLARE @count INT
    DECLARE @city VARCHAR(75)
    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 = @count OUTPUT
    
    SELECT @count
    

    【讨论】:

    【解决方案2】:

    动态版本

        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'
    

    【讨论】:

      【解决方案3】:

      您可能已经尝试过,但是您的规范是否可以做到这一点?

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

      【讨论】:

        【解决方案4】:

        这可能是一个解决方案?

        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
        

        【讨论】:

          【解决方案5】:
          DECLARE @sqlCommand nvarchar(1000)
          DECLARE @city varchar(75)
          DECLARE @cnt int
          SET @city = 'London'
          SET @sqlCommand = 'SELECT @cnt=COUNT(*) FROM customers WHERE City = @city'
          EXECUTE sp_executesql @sqlCommand, N'@city nvarchar(75)', @city = @city
          RETURN @cnt
          

          【讨论】:

          • 我认为你的答案被截断了。
          • 消息 137,Must declare the scalar variable "@cnt". 消息 178,A RETURN statement with a return value cannot be used in this context.。一个不错的作品,兄弟))
          【解决方案6】:
           vMYQUERY := 'SELECT COUNT(*) FROM ALL_OBJECTS WHERE OWNER = UPPER(''MFI_IDBI2LIVE'') AND OBJECT_TYPE = ''TABLE'' 
              AND OBJECT_NAME  =''' || vTBL_CLIENT_MASTER || '''';
              PRINT_STRING(VMYQUERY);
              EXECUTE IMMEDIATE  vMYQUERY INTO VCOUNTTEMP ;
          

          【讨论】:

          • 这不适用于sql server。
          猜你喜欢
          • 1970-01-01
          • 2018-11-30
          • 1970-01-01
          • 2017-06-02
          • 2020-06-29
          • 1970-01-01
          • 2014-06-30
          • 2018-06-13
          相关资源
          最近更新 更多