Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Şunlar için geçerlidir:SQL Server
Azure SQL Veritabanı
Azure SQL Yönetilen Örneği
Microsoft Fabric'te
SQL analiz uç noktasıMicrosoft Fabric'te
ambarMicrosoft Fabric'te SQL veritabanı
Programlama dillerindeki işlevler gibi SQL Server kullanıcı tanımlı işlevler de parametreleri kabul eden, karmaşık bir hesaplama gibi bir eylem gerçekleştiren ve bu eylemin sonucunu değer olarak döndüren yordamlardır. Dönüş değeri tek bir skaler değer veya sonuç kümesi olabilir.
Kullanıcı tanımlı işlevlerin avantajları
Kullanıcı tanımlı işlevler (UDF) neden kullanılır?
Modüler programlama. İşlevi bir kez oluşturabilir, veritabanında depolayabilir ve programınızda istediğiniz sayıda çağırabilirsiniz. Kullanıcı tanımlı işlevler, program kaynak kodundan bağımsız olarak değiştirilebilir.
Daha hızlı yürütme. Saklı yordamlara benzer şekilde, Transact-SQL kullanıcı tanımlı işlevler planları önbelleğe alarak ve yinelenen yürütmeler için yeniden kullanarak Transact-SQL kodun derleme maliyetini azaltır. Bu, kullanıcı tanımlı işlevin her kullanımda yeniden ayrıştırılması ve yeniden iyileştirilmesine gerek olmadığı anlamına gelir ve bu da yürütme sürelerinin daha hızlı olmasına neden olur.
Ortak dil çalışma zamanı (CLR) işlevleri hesaplama görevleri, dize işleme ve iş mantığı için Transact-SQL işlevlere göre önemli performans avantajı sunar. Transact-SQL işlevleri, yoğun veri erişimli mantık için daha uygundur.
Ağ trafiğini azaltın. Tek bir skaler ifadede ifade edilmeyecek bazı karmaşık kısıtlamalara göre verileri filtreleyen bir işlem işlev olarak ifade edilebilir. İşlev, istemciye gönderilen satır sayısını azaltmak için WHERE yan tümcesinde çağrılabilir.
Önemli
Sorgulardaki Transact-SQL UDF'ler yalnızca tek bir iş parçacığında (seri yürütme planı) yürütülebilir. Bu nedenle UDF'lerin kullanılması paralel sorgu işlemeyi engeller. Paralel sorgu işleme hakkında daha fazla bilgi için bkz. Sorgu İşleme Mimarisi Kılavuzu.
İşlev türleri
Bu bölümde skaler işlevler, tablo değerli işlevler ve sistem işlevleri arasındaki farklar açıklanmaktadır.
Skaler işlevler
Kullanıcı tanımlı skaler işlevler, RETURNS yan tümcesinde tanımlanan türde tek bir veri değeri döndürür. Satır içi skaler işlev için, döndürülen skaler değer tek bir deyimin sonucudur. Çok durumlu skaler bir işlev için işlev gövdesi, tek değeri döndüren bir dizi Transact-SQL deyimi içerebilir. Dönüş türü metin, ntext, resim, imleç ve zaman damgası dışında herhangi bir veri türü olabilir. Örnekler için bkz. Kullanıcı tanımlı işlevler (veritabanı altyapısı) oluşturma.
Tablo değerli fonksiyonlar
Kullanıcı tanımlı tablo değerli işlevler (TVF'ler) bir tablo veri türü döndürür. Satır içi tablo değerli bir işlev için işlev gövdesi yoktur; tablo, tek bir SELECT deyiminin sonuç kümesidir. Örnekler için bkz. Kullanıcı tanımlı işlevler (veritabanı altyapısı) oluşturma.
Sistem işlevleri
SQL Server, çeşitli işlemleri gerçekleştirmek için kullanabileceğiniz birçok sistem işlevi sağlar. Değiştirilemezler. Daha fazla bilgi için bkz. SQL veritabanı işlevleri nelerdir?, Transact-SQL için kategoriye göre Sistem İşlevleri ve Sistem dinamik yönetim görünümleri.
Yönergeler
Transact-SQL bir deyimin iptal edilmesine ve modüldeki bir sonraki deyimle (tetikleyiciler veya saklı yordamlar gibi) devam etmelerine neden olan hatalar bir işlev içinde farklı şekilde ele alınır. İşlevlerde bu tür hatalar işlevin yürütülmesinin durmasına neden olur. Bu da işlevi çağıran deyiminin iptal edilmesine neden olur.
BEGIN...END blokundaki ifadeler herhangi bir yan etki yapamaz. İşlev yan etkileri, veritabanı tablosunda değişiklik yapma gibi işlevin dışında bir kapsama sahip olan bir kaynağın durumunda yapılan kalıcı değişikliklerdir. İşlevdeki deyimlerin yapabilecekleri tek değişiklik, yerel imleçler veya değişkenler gibi işlevde yerel nesnelerde yapılan değişikliklerdir. Veritabanı tablolarında yapılan değişiklikler, işlevde yerel olmayan imleçlerdeki e-posta gönderme, katalog değişikliğini deneme ve kullanıcıya döndürülen bir sonuç kümesi oluşturma gibi işlemler, işlevde gerçekleştirilemez eylemlere örnek olarak verilebilir.
Eğer bir CREATE FUNCTION ifadesi, verildiğinde mevcut olmayan kaynaklar üzerinde yan etkiler oluşturursa, SQL Server bu ifadeyi yürütür. Ancak SQL Server çağrıldığında işlevi yürütmez.
Sorguda belirtilen bir işlevin yürütüliş sayısı, iyileştirici tarafından oluşturulan yürütme planları arasında farklılık gösterebilir. Bir yan tümcedeki bir alt sorgu tarafından çağrılan bir WHERE işlev buna örnektir. Alt sorgunun ve işlevinin yürütüliş sayısı, iyileştirici tarafından seçilen farklı erişim yollarına göre farklılık gösterebilir.
Belirleyici işlevler şemaya bağlı olmalıdır. Deterministik bir işlev oluştururken yan tümcesini SCHEMABINDING kullanın.
Kullanıcı tanımlı işlevler hakkında daha fazla bilgi ve performans konuları için bkz. Kullanıcı tanımlı işlevler (Veritabanı Altyapısı) oluşturma.
İşlevde geçerli deyimler
İşlevde geçerli olan deyim türleri şunlardır:
DECLAREdeyimleri, işlevin yerel veri değişkenlerini ve imleçlerini tanımlamak için kullanılabilir.İşleve yerel nesnelere değerler atanması, skaler ve tablo yerel değişkenlerine
SETile değer atamak gibi işlemleri içerir.İşlevde bildirilen, açılan, kapatılan ve serbest bırakılan yerel imleçlere başvuran imleç işlemleri.
FETCHistemciye veri döndüren deyimlere izin verilmez. YalnızcaFETCHyan tümcesiniINTOkullanarak yerel değişkenlere değer atayan deyimlere izin verilir.TRY...CATCHifadeleri hariç akış kontrolü ifadeleri.SELECTişlevine yerel olan değişkenlere değer atayan ifadelere sahip seçme listeleri içeren deyimler.UPDATE,INSERTveDELETEdeyimleri işlevinde yerel olan tablo değişkenlerini değiştirir.EXECUTEgenişletilmiş saklı prosedürü çağıran deyimler.
Yerleşik sistem işlevleri
Aşağıdaki belirsiz yerleşik işlevler Transact-SQL kullanıcı tanımlı işlevlerde kullanılabilir.
CURRENT_TIMESTAMPGET_TRANSMISSION_STATUSGETDATEGETUTCDATE@@CONNECTIONS@@CPU_BUSY@@DBTS@@IDLE@@IO_BUSY@@MAX_CONNECTIONS@@PACK_RECEIVED@@PACK_SENT@@PACKET_ERRORS@@TIMETICKS@@TOTAL_ERRORS@@TOTAL_READ@@TOTAL_WRITE
Aşağıdaki belirsiz yerleşik işlevler Transact-SQL kullanıcı tanımlı bir işlevde (UDF) kullanılamaz .
NEWIDNEWSEQUENTIALIDRANDTEXTPTR
UDF içinde bu işlevlerden birine başvurursanız aşağıdaki hatayı alırsınız:
Msg 443, Level 16, State 1
Invalid use of a side-effecting operator <operator> within a function.
Belirleyici ve belirsiz yerleşik sistem işlevlerinin listesi için bkz. Deterministic ve nondeterministic functions.
Şemaya bağlı işlevler
CREATE FUNCTION işlevi, tablolar, görünümler ve diğer kullanıcı tanımlı işlevler gibi başvurduğunu nesnelerin şemasına bağlayan bir SCHEMABINDING yan tümceyi destekler. Şemaya bağlı bir işlev tarafından başvuruda bulunan herhangi bir nesneyi değiştirme veya bırakma girişimi başarısız olur.
SCHEMABINDING içinde belirtebilmeniz için önce bu koşulların karşılanması gerekir:
İşlev tarafından başvuruda bulunılan tüm görünümler ve kullanıcı tanımlı işlevler şemaya bağlı olmalıdır.
İşlev tarafından başvuruda bulunılan tüm nesneler işlevle aynı veritabanında olmalıdır. Nesnelere tek parçalı veya iki parçalı adlar kullanılarak başvurulmalıdır.
İşlevde başvuruda bulunan tüm nesneler (tablolar, görünümler ve kullanıcı tanımlı işlevler) üzerinde izniniz olmalıdır
REFERENCES.
Şema bağlamasını kaldırmak için kullanabilirsiniz ALTER FUNCTION .
ALTER FUNCTION işlevi, WITH SCHEMABINDING belirtmeden yeniden tanımlamalıdır.
Parametreleri belirtme
Kullanıcı tanımlı bir işlev sıfır veya daha fazla giriş parametresi alır ve bir skaler değer veya tablo döndürür. Bir işlevin en fazla 1.024 giriş parametresi olabilir. İşlevin bir parametresi varsayılan değere sahip olduğunda, varsayılan değeri almak için işlevi çağırırken anahtar sözcüğü DEFAULT belirtilmelidir. Bu davranış, parametrenin atlanması varsayılan değeri de ifade eden kullanıcı tanımlı saklı yordamlarda varsayılan değerlere sahip parametrelerden farklıdır. Kullanıcı tanımlı işlevler çıkış parametrelerini desteklemez.
İlgili içerik
- Kullanıcı tanımlı işlevler oluşturma (Veritabanı Altyapısı)
- CLR işlevleri oluşturma
- Kullanıcı tanımlı toplamalar oluşturma
- Kullanıcı tanımlı işlevleri değiştirme
- Kullanıcı tanımlı işlevleri silme
- Kullanıcı tanımlı işlevleri yürütme
- Kullanıcı tanımlı işlevleri yeniden adlandırma
- Kullanıcı tanımlı işlevleri görüntüleme