Kullanıcı tanımlı fonksiyonu tasarım yönergeleri
Kullanıcı tanımlı BIR işlev, bu şekilde kullanılabilecek yeniden kullanılabilir kodu sağlayan bir veritabanı nesnesi olarak depolanır:
Içinde Transact-SQL Örneğin, SELECT deyimleri
işlev çağıran uygulamalar
Başka bir kullanıcı tanımlı tanımında işlev
Bir görünümü parameterize veya dizinli görünüm işlevselliğini artırmak için
Bir sütun tanımlamak için bir tablo
sütun, bir CHECK kısıtlaması tanımlamak için
saklı yordam değiştirmek için
Işlev türünü seçme
Önce kullanıcı tanımlı bir işlev tasarlarken, gereksinimlerinize en uygun olan işlev türünü belirleyin.Çalışmaz:
Bir skaler (tek değer) döndürür.
Bir tablo (birden çok satır) geri dönün.
Karmaşık bir hesaplama gerçekleştirme
Öncelikle, erişim SQL Server Veri
Kullanıcı tanımlı işlevler ya da yazılan Transact-SQL veya .NET Framework Her iki skaler dönmek ve değerlerinin tablosunu kullanabilirsiniz.
Işlevler, Özellikler
Birkaç özellik yeteneklerini saptamak ve kullanıcı tanımlı işlevler, SQL Server Database Engine işlev çağrısı hesaplanmış bir sütun dizinlerde aracılığıyla veya işlev başvurusu, dizin oluşturulmuş görünümler yoluyla işlevinin sonuçlarını dizin oluşturmak için . Bu özellikler yöntemleri için geçerlidir CLR kullanıcı tanımlı türler.
Determinism
Deterministic işlevleri aynı sonucu her saat belirli bir her çağrıldıklarında dönmek küme giriş değerleri ve belirli bir veritabanını aynı durumu.Nondeterministic işlevleri, veritabanı durumunu, bunlar aynı kalır, belirli bir giriş değerleri kümesini her çağrıldıklarında farklı sonuçlar döndürebilir.
The Database Engine automatically analyzes the body of Transact-SQL functions and evaluates whether the işlev is deterministic. Örneğin, belirli olmayan levler işlevi çağıran veya genişletilmiş saklı yordamlar, işlev çağrıları sonra Database Engine işlev deterministic olmayan olarak işaretler. Ortak dil çalışma zamanı (CLR) işlevleri için Database Engine işlev deterministic veya değil kullanma olarak işaretlemek için yazar işlevinin dayanan SqlFunction özel öznitelik.
Duyarlık
Kullanıcı tanımlı BIR işlev herhangi bir kayan gidermez, kesin olarak kabul edilir operasyonlar işaretleyin.
The Database Engine automatically analyzes the body of Transact-SQL functions and evaluates whether the işlev is precise. CLR işlevleri için Database Engine işlev kesin veya değil kullanma olarak işaretlemek için yazar işlevinin dayanan SqlFunction özel öznitelik.
Veri erişimi
Bu özellik, işlev kullanarak yerel veritabanı sunucuya erişen olup olmadığını gösterir SQL Server işlemdeki yönetilen sağlayıcı. Daha fazla bilgi için bkz:CLR veritabanı nesnelerini veri Access'ten.
The Database Engine automatically analyzes the body of Transact-SQL functions and evaluates whether the işlev performs data access. CLR işlevleri için Database Engine kullanarak veri erişimi özellikleri belirtmek için yazarına işlev üzerinde dayanır SqlFunction özel öznitelik.Bu özelliği, yürütme sırasında uygulanır saat tarafından Database Engine. Varsa işlevi DataAccess = Yok, ancak yürütme sırasında işlev başarısız olan veri erişimi gerçekleştiren saat.
Sistem veri erişimi
Bu özellik, işlev yerel veritabanı sunucusu kullanarak sistemi meta veriler eriştiği olup olmadığını gösterir SQL Server işlemdeki yönetilen sağlayıcı.
The Database Engine automatically analyzes the body of Transact-SQL functions and evaluates whether the işlev performs system data access. CLR işlevleri için Database Engine kullanarak sistem veri erişimi özellikleri belirtmek için yazarına işlev üzerinde dayanır SqlFunction özel öznitelik.Bu özelliği, yürütme sırasında uygulanır saat tarafından Database Engine. Varsa işlevi SystemDataAccess = Yok, ancak yürütülmesi sırasında işlev başarısız olan sistem veri erişimi gerçekleştirir.
IsSystemVerified
Bu özellik işlev determinism ve duyarlık özelliklerini tarafından doğrulanabilen olup olmadığını gösterir Database Engine. Bu özellik için geçerlidir Transact-SQL işaretlenmiş herhangi bir işlev çağrısı olarak işlev görür. IsSystemVerified = false.Özellik için CLR işlevleri false'tur.
The Database Engine automatically derives the IsSystemVerified özellik for functions.Için Transact-SQL işlevler, işaretlenmiş herhangi bir işlev erişiyorsanız, IsSystemVerified işlevi kendisini işaretlenmiş daha sonra false, =IsSystemVerified = false.
Işlevler, dizinlenmiş bir hesaplanan sütunlar ve dizin oluşturulmuş görünümler hakkında daha fazla bilgi için bkz: Hesaplanan sütunlar üzerinde dizin oluşturma, ve Dizine eklenen görünümler oluşturma.