2011-10-26 61 views
0

我需要創建一個存儲過程,它將返回一個代碼列表,然後我需要調用另一個存儲過程來逐個檢查每個代碼。嵌套存儲過程

我該怎麼做?

CREATE PROCEDURE [dbo].[paBltBuscarBoletasASA] @id_Asa int 
AS 
DECLARE @Query int, @Contador int 
SET @Contador = 0 
BEGIN 
     SET NOCOUNT ON; 
     SET @Query = (
       SELECT 
        localizacion.c_Fk_IdBoleta 
       FROM 
        Blt_Boleta as boleta, Fnc_Localizacion as localizacion 
       WHERE 
        boleta.c_Pk_IdBoleta = localizacion.c_Fk_IdBoleta AND 
        localizacion.si_CodAsa = @id_Asa) //This query give the list of Codes. For example 45550711, 40480711, 80110711... etc 

    exec dbo.paBltMarcarErroresBoleta @Query //And here I need send one by one that list of Codes 
END 

回答

-1

聲明您所設置等於@Query查詢光標,然後插入在WHILE @@ FETCH_STATUS = 0循環中對每個後續值進行變量。然後按照您當前的做法將@Query變量傳遞給第二個存儲過程。這裏有一個例子:

DECLARE myCursor CURSOR FOR 
SELECT localizacion.c_Fk_IdBoleta 
FROM Blt_Boleta as boleta, Fnc_Localizacion as localizacion 
WHERE boleta.c_Pk_IdBoleta = localizacion.c_Fk_IdBoleta AND 
localizacion.si_CodAsa = @id_Asa 

OPEN myCursor 

FETCH NEXT FROM myCursor INTO @Query 

WHILE @@FETCH_STATUS = 0 
BEGIN 
    exec dbo.paBltMarcarErroresBoleta @Query 
    //do additional processing 

FETCH NEXT FROM myCursor INTO @Query 
END 

CLOSE myCursor 
DEALLOCATE myCursor 

其它遊標的幫助:http://msdn.microsoft.com/en-us/library/ms180169.aspx

+0

好了,現在,我怎麼救第二個SP的結果在時間的表? – ale

+0

只要執行'INSERT INTO #tempTable EXEC dbo.paBltMarcarErroresBoleta @ Query'。更多的信息和選項可以在這裏找到http://www.sommarskog.se/share_data.html –

+0

其他問題,第二個SP返回一個表格有5列(Description_Error,Id_Boleta,Name_Boleta,Cod_Asa,Cultivo),我需要聲明這個時態表中的列?,這個想法是在CrystalReport中顯示這個表,但是我需要知道這是否需要? – ale

1

也可以考慮添加一個標量函數,並調用它在您的查詢,如:

SELECT 
    localizacion.c_Fk_IdBoleta, 
    dbo.checkCode(localizacion.c_Fk_IdBoleta) as Check 
FROM 
    Blt_Boleta as boleta, Fnc_Localizacion as localizacion 
WHERE 
    boleta.c_Pk_IdBoleta = localizacion.c_Fk_IdBoleta AND 
    localizacion.si_CodAsa = @id_Asa