2015-02-27 1 views
0

Я пытаюсь написать процедуру, которая вызывает SQL, вставленную в таблицу. Когда я выполняю эту процедуру, он возвращает определенное значение, и мне нужно его захватить. Ниже приведен пример:Возвращает значение, возвращаемое Dynamic 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 [email protected]  
    */ 
    SET @SQL= REPLACE(@SQL,'@ID',@ID) 
    EXEC (@SQL) 

END 

Так что если число возвращений говорит 12351 строк. Это дало бы из результата, когда я выполнить процедуру, как:

EXEC Temp_Test 1; 

мне нужно, чтобы захватить вывод в переменную внутри Создание блока процедуры, а затем использовать значение. Не могли бы вы посоветовать мне, как я могу подойти к этой проблеме.

+0

Может быть, это поможет: [ссылка] (https://social.msdn.microsoft.com/Forums/sqlserver/en-US/6fd8778c-4fc1-4067 -bcb7-724d08af7144/set-the-result-of-execute-in-a-variable-? forum = transactsql) Я боюсь, что вы не можете использовать выбранный запрос как есть. – Matze

+0

Если все ваши запросы в этой таблице выбирают только одно целое число, вы можете сделать что-то вроде этого: 'DECLARE @t TABLE (v INT); INSERT @t EXEC (@SQL); SELECT * FROM @ t'. В противном случае вам нужно будет развернуть таблицу temp в соответствии с набором возвращаемых значений. – Malk

+0

Хотя ваш конкретный прецедент не подходит, эта ссылка может быть полезной http://www.sommarskog.se/share_data.html – Alejandro

ответ

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 

Execute Proc

DECLARE @Value INT; 

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

 Смежные вопросы

  • Нет связанных вопросов^_^