2013-10-11 29 views
2

我試圖發送和參數數組的存儲過程T-SQL:通過ID數組的存儲過程

SELECT [id_Curso] AS IDCurso 
    ,[Cod_Estabelecimento] AS CodEstabelecimento 
    ,[Des_Estabelecimento] AS DesEstabelecimento 
    ,[Cod_Curso] AS CodCurso 
    ,[Des_Curso] AS DescCurso 
    ,[Cod_Grau] AS CodGrau 
    ,[Des_Grau] AS DescGrau 
    ,[Cod_Area_Educacao] AS CodAreaEducacao 
    FROM [BEP_DEV].[dbo].[Curso] 
    where [Cod_Area_Educacao] in @List 

DECLARE @List VARCHAR(MAX); 
SELECT @List = '(1,2,3,4)'; 

SELECT [id_Curso] AS IDCurso 
    ,[Cod_Estabelecimento] AS CodEstabelecimento 
    ,[Des_Estabelecimento] AS DesEstabelecimento 
    ,[Cod_Curso] AS CodCurso 
    ,[Des_Curso] AS DescCurso 
    ,[Cod_Grau] AS CodGrau 
    ,[Des_Grau] AS DescGrau 
    ,[Cod_Area_Educacao] AS CodAreaEducacao 
    FROM [BEP_DEV].[dbo].[Curso] 
where [Cod_Area_Educacao] in (1,2,3,4) 

我怎樣才能變換首例類似:第二個(哪個工作。)?

我也嘗試過使用xml,但也無法使其工作。

任何幫助?

+3

[T-SQL存儲過程接受多個Id值]的可能重複(http:// st ackoverflow.com/questions/43249/t-sql-stored-procedure-that-accepts-multiple-id-values) – mayabelle

+1

檢查右側的第一個鏈接http://stackoverflow.com/questions/43249/t-sql-stored - 過程 - 即-接受數倍-ID-值?RQ = 1 –

回答

1

您可以使用udf解析字符串並將值插入表(在您的案例中包含一個int列),然後將您的Curso表加入到通過調用CSV字符串上的udf得到的表上。

11

有很多可能性,但考慮到你在SQL 2008上,第一選擇是使用新的表值參數,在這個參數中你可以發送整個表到查詢或存儲程序在一個單一去(在你的情況下,一個表與單個列與任意數量的ID)。

首先在數據庫中創建一個表類型:

CREATE TYPE idTable AS TABLE (id INT) 

然後,只需與該類型的參數中聲明你的程序,並使用它像任何其他表:

CREATE PROCEDURE SelectList (@IDs idTable READONLY) AS 
SELECT * FROM sometable 
INNER JOIN @IDs AS idTable ON idTable.id=sometable.id 

有一個這篇文章詳細討論了這種方法和其他方法,以便做你需要的東西http://www.sommarskog.se/arrays-in-sql.html