Aracılığıyla paylaş


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.