2012-09-27 22 views
7

Ben bu şekilde veriyi döndüren bir saklı yordam Test_Sp: Ben eklemek istediğinizSQL Server: parametrelere dayalı tabloya yerleştirin saklı yordam sonuçları

Id Name  Age Address State Country 
1 ManiS 25  aaaa  bbb  ccc 
Bu saklı yordam veri 6 sütun iade ediyor

ama geçici bir tabloya sadece ilk 2 sütun ..

My geçici tablo değişkendir:

Declare @testTbl Table (RowId int identity, Name nvarchar(100), Age int); 
INSERT INTO @testTbl(Name,Age) EXEC [Test_Sp] 23; 
Select * from @testTbl; 

Ama bu hatayı alıyorum:

Msg 50000, Level 16, State 0, Procedure Test_Sp, Line 16
Cannot use the ROLLBACK statement within an INSERT-EXEC statement.

Ben yaklaşık farkındayım Select * into & Ben saklı yordam çıkış işe yarayacak demektir aynı sütunlu Geçici bir tablo ..

Sorum oluşturursanız: Bir geçici tabloya sadece iki sütun eklemek mümkündür parametrelere göre saklı yordam çıktısı değişkeni?

+2

Neden sadece 6 sütun eklemek ve yaklaşık 4 umurumda değil görmezden dönerseniz? Veya yeni bir saklı yordam yazabilir misiniz? Veya saklı yordamı değiştirerek bazı durumlarda yalnızca iki sütun isteyebileceğinizi biliyorsunuz? –

+0

Merhaba @AaronBertrand ... Bu sp'yi (Test_Sp) başka bir senaryo için kullandım, bu yüzden bu sp'ye yeni sütunlar ekleyeceğim, bu yüzden bu temp tablo değişken ekleme işlemine etki etmeyecek (çünkü bu geçici değişken ekleme farklı sp tarafından kullanılıyor) ... –

+0

Farklı amaçlara hizmet etmek için farklı saklı yordamlara ihtiyacınız olduğu gibi geliyor. Saklı yordamın yazılması için yazılmadığı sürece, "hey, bu sefer iki sütun geri dönelim" demenin bir yolu yok, tamam mı? [OPENROWSET'e sahip hileler var] (http://stackoverflow.com/questions/653714/how-to-select-into-temp-table-from-stored-procedure) ama belki de [bunu okuyalım] gerekir. : //www.sommarskog.se/share_data.html). –

cevap

17

Seçenek 1: O

INSERT INTO Temp 
Exec [Test_Sp] 23; 

INSERT INTO @testTbl(Name,Age) 
select name,age from temp 

Seçenek 2:

bu döner sp tüm sütunları bir ara geçici tablo oluşturmak ve bunu Sproc'inizi değiştirin ve bir tane daha bit veri türü parametresi ekleyin @limitedcolumn @ limitedcolumn = true dönüş sadece gerekli kolonlar başka tüm sütunları

INSERT INTO @testTbl(Name,Age) EXEC [Test_Sp] 23,true; 
İlgili konular