2011-07-12 18 views
74

Tablo değerli işlevde bir değişkeni nasıl bildirebilirim?Tablo değerli işlevde değişkeni bildir

+0

satır içi veya çok deyimi

Bu

bir değişkeni olamaz? * MSDN * onları nasıl tanımlar? – gbn

+9

@YogeshBhadauirya "Arama motorunu kullan" diyen gülünç sorun, * bu * arama motorunun nerede olduğudır. Sonsuz bir özyineleme durumu. Sayfayı silmek ya da sadece soruyu cevaplamak en iyisidir. – Volvox

+24

Bu soru daha fazla sevmeyi hak ediyor: yeniden ele alınıp aşağıdaki cevap kabul edildi. Aslında * gerçek bir soru. – Askolein

cevap

136

Tablo değerli işlevlerin iki çeşidi vardır. Biri yalnızca bir seçim ifadesi ve yalnızca bir seçim ifadesinden daha fazla satır içeren bir. Sen artık şöyle yapmak zorunda

create function Func() returns table 
as 
return 
select 10 as ColName 

:

create function Func() 
returns @T table(ColName int) 
as 
begin 
    declare @Var int 
    set @Var = 10 
    insert into @T(ColName) values (@Var) 
    return 
end 
+1

Teşekkürler, bu çok yararlı –

+13

İlk örnek, çok satırlı Tablo Değerli İşlevle karşılaştırıldığında performans yararları olan bir "Satır İçi Tablo Değerli İşlev" olarak bilinir, yani veritabanı sunucusu * sorguyu ITVF ile * yeniden * düzenleyebilir * Ana sorguya satır içi *, temelde parametreli bir "VIEW" haline gelirken, bir MSTVF daha opak bir saklı yordam gibi davranır (sprocs'a kıyasla kendi avantajlarıyla olsa da). Satır içi fonksiyonlar MSTVF'ye göre tercih edilmelidir. Ara değerleri (karmaşık skaler işlev ifadesinin sonucu gibi) hesaplayıp depolamanız gerekiyorsa, bir alt sorgu kullanın. – Dai

+0

Muhtemelen belirtmek istediğin değişkeni doldurmak için kullanmaktansa, herhangi bir şekilde genellenebilirse, o zaman onu üretmek için ayrı bir işlev yazmayı düşünebilirsiniz. Bu, @Dai'nin yukarıda tarif ettiği ITVF'yi, tüm faydaları ile birlikte kullanmanıza izin verirken, yine de işlevinize dinamik olarak oluşturulmuş bir değer eklemenizi sağlar. Ben sadece MSTVF formu kullanmak zorunda kalmam için bir yardımcı işlevine parametrelerinden birini geçer yukarıdaki çözüm (teşekkürler @MikaelEriksson!) Yardımıyla bir işlev yazdı. – naughtilus

İlgili konular