返回Dynamic SQL返回的值

时间:2015-02-27 23:59:56

标签: sql sql-server dynamic-sql

我正在尝试编写一个调用插入表中的SQL的过程。当我执行此过程时,它返回一个值,我需要捕获它。以下是一个例子:

Create Proc Temp_TEst 
@ID int
as
BEGIN
Declare @SQL VARCHAR(8000)
   Select @SQL=[sql] from Testtable where ID=1
      /* PRINT @SQL 
         The above select returns the following:

    Select COUNT(*) from TableTest_1 where ID=@ID     
     */
   SET @SQL= REPLACE(@SQL,'@ID',@ID) 
   EXEC (@SQL)

END

因此,如果计数返回说12351行。当我执行如下过程时,这会给出结果:

   EXEC Temp_Test 1;

我需要在Create过程块内的变量中捕获输出,然后使用该值。能否指导我如何处理这个问题。

1 个答案:

答案 0 :(得分:0)

Create Proc Temp_TEst 
@ID int, 
@OutPut INT OUTPUT
as
BEGIN
Declare @SQL NVARCHAR(MAX), @OutPut INT;

   Select @SQL=[sql] from Testtable where ID = 1

   SET @SQL=  N' SELECT @OutPut = ( ' + @SQL + N' )'

    Exec sp_executesql @SQL 
                      ,N'@ID INT , @OutPut INT OUTPUT'
                      ,@ID 
                      ,@OutPut OUTPUT
END

执行Proc

DECLARE @Value INT; 

exec Temp_TEst @ID     = 1
              ,@OutPut = @value OUTPUT   --<-- now this variable will be populated