2013-09-22 106 views
3

我使用的是動態sql從動態SQL變量獲取輸出

DECLARE @searchstring VARCHAR(500) 
DECLARE @str VARCHAR(MAX) 
SELECT @str = 'SELECT * FROM Table1 WHERE ' + @searchstring 
EXECUTE @str 

我需要的是我要選擇從上述動態sql一個值在不同的SP 通過比方說,我需要ID列值並將其傳遞給名爲GetAnotherData @Ids的另一個sp。我怎樣才能做到這一點?

+1

Chekc這篇文章:http://stackoverflow.com/questions/803211/how-to-get-sp-executesql-result-into-a-variable – Lokesh

+0

感謝您的鏈接..我有一個想法,如何繼續。 – nrsharma

+0

是否要選擇列中的單行或全部行?你能澄清一下嗎? –

回答

5

演示以及你可以用亞歷山大·費德林例如去,但如果你不想創建任何臨時表,你可以使用XML輸出參數來傳遞您的ID:

declare @stmt nvarchar(max), @Data xml, @searchstring nvarchar(max) 

select @stmt = ' 
    select @Data = (
     select id 
     from Table1 
     where ' + @searchstring + ' 
     for xml raw(''Data'') 
    ) 
' 

exec sp_executesql 
    @stmt = @stmt, 
    @params = N'@Data xml output', 
    @Data = @Data output 

select 
    T.C.value('@id', 'int') as id 
from @Data.nodes('Data') as T(C) 

sql fiddle demo

0

以下示例創建具有一個Id列的用戶定義表類型。此外,該INSERT @RetIds EXEC(@STR)語句填充參數列表,然後傳遞值到存儲過程

CREATE TYPE RetIds AS TABLE 
(
    Id int 
) 

DECLARE @searchstring varchar(500) = 'AND SearchCol = 1' 
DECLARE @str varchar(max) 
SELECT @str ='SELECT Id FROM dbo.test6 WHERE 1 = 1 ' + @searchstring 

DECLARE @RetIds AS RetIds 
INSERT @RetIds 
EXEC(@str) 
EXEC dbo.ExecIds @RetIds 

請參見第SQLFiddle

+0

我不想創建任何臨時表來獲取@ID .. – nrsharma

+0

據我所知,沒有辦法將數據集傳遞給存儲過程而無需創建臨時表。這裏沒有魔力;)... –

+0

@AlexanderFedorenko有一個XML參數的方法:)不知道是否OP'll喜歡它 –