2011-02-02 36 views
5

Bir saklı yordamın sonuçlarını başka bir saklı yordamda kullanmak mümkün mü?İç içe geçmiş saklı yordamları saklı yordamları aramada kullanın Sql Server 2008

I.I.I.e.

CREATE PROCEDURE [dbo].[Proc1] 
     @ID INT, 
     @mfgID INT, 
     @DealerID INT 

AS 
BEGIN 

    DECLARE @Proc1Result UserDefinedTableVariable 

    EXEC @Proc1Result = Proc2 
     @SomeID = @ID, 
     @SomeID2 = @mfgID, 
     @SomeID3 = @DealerID 

    -- Now I want to use the table returned by the stored procedure here. 
    SELECT [col1],[col2] FROM @Proc1Result 

END 
Ben INSERT INTO @Proc1Result EXEC Proc2 (with parameters passed) kullanarak çalıştı

ancak INSERT EXEC yuvalanmış açıklamada denilen edilemez.

Bunu gerçekleştirmenin herhangi bir yolu var mı? Ortam SQL Server 2008'dir.

cevap

9

Kayıtlı yordamları up to 32 levels iç içe yerleştirebilirsiniz.

INSERT-EXEC ile ilgili olarak this article üzerinden okuma yapmanızı öneririm. some_sp some_other_sp INSERT- EXEC ile aramaya çalışırsa

, bir hata mesajı alırsınız: İşte snippit olduğunu. Böylece, bir seferde sadece bir INSERT-EXEC aktif olabilirsiniz. Bu , SQL Server'da bir kısıtlamadır.

5

Haklısınız, INSERT ... EXEC iç içe olamaz. How to Share Data Between Stored Procedures'dan.

Yuva yapamaz. some_sp, some_other_sp numaralı telefonu arayarak INSERT-EXEC, ile bir hata mesajı alırsınız. Böylece, bir seferde sadece bir tane INSERT-EXEC aktif olabilir. Bu, SQL Server'da kısıtlamasıdır.

Başka bir yol bulmanız gerekiyor. Erland'ın makalesi, sahip olduğunuz tüm seçenekleri hemen hemen karşılıyor ve bunları ayrıntılı olarak tartışıyor. diğerinden sp içine sonuçları almak için

+0

Tam olarak nasıl aynı linki paylaştım ve sizden 2 dakika önce alıntı yaptım, ancak daha fazla oy aldınız mı? Oyuncak ayı olmalı ... –

+1

@Abe: benimki yordam isimlerini biçimlendirdi, bu da saat ve çalışma saatlerini ve seçmenleri ekstra çabayı takdir ediyor;) –

+1

Remus ayrıca, kaynaklardan daha büyük bir kısmı, şüphesiz ki Konuyla ilgili daha fazla bağlamda OP. :) –

1

Bir sözdizimi:

INSERT INTO [myTable] 
EXEC Proc1 [param1], [param2], [param3], etc. 

Ama bunun içine yerleştirir ve alan adları ve türleri tam olarak maç zorunda birinci tablo oluşturmak zorundayız.

+0

lütfen diğer 2 cevabı okuyun – RichardTheKiwi

+0

Diğer iki cevap tutarlı bile değil. (Bu yolla onları yuvalayabilirsiniz.) OP'nin nerede olduğunu bir kereden fazla iç içe geçirdiğini anlamıyorum ama doğru anlamıyor olabilirim. –

İlgili konular