Deterministic ve Nondeterministic işlevler
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.
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 . Fonksiyonun determinism bir özellik var.Örneğin, kümelenmiş dizin görünümü nondeterministic tüm işlevleri başvuruyorsa bir görünüm oluşturulamıyor.Işlevler, determinism dahil olmak üzere, özellikleri hakkında daha fazla bilgi için bkz: Kullanıcı tanımlı fonksiyonu tasarım yönergeleri.
Bu konu, yerleşik sistem işlevleri determinism ve kullanıcı tanımlı işlevler deterministic özelliğini etkisi genişletilmiş saklı yordam çağrısı içerdiğinde tanımlar.
Yerleşik işlev Determinism
Yerleşik herhangi bir işlev determinism etkileyen edemiyor.Her yerleşik fonksiyon deterministic veya bağlı nondeterministic nasıl işlev tarafından uygulanan üzerinde SQL Server.
toplamak ve dize yerleşik fonksiyonların deterministic tümü.Bu işlevlerin listesi için bkz: toplamak işlevleri (Transact-SQL) ve Dize işlevleri (Transact-SQL).
toplamak dışında yerleşik işlevler ve dize işlevlerinin kategorilerini aşağıdaki yerleşik işlevler her zaman belirli olur.
abs |
DATEDIFF |
parsename |
acos |
DAY |
GÜÇ |
asin |
DERECE |
RADYAN |
atan |
BKL |
ROUND |
ATN2 |
KAT |
İŞARETİ |
TAVANA |
isnull |
sin |
BİRLEŞİM |
isnumeric |
KARE |
cos |
GÜNLÜK |
sqrt |
cot |
LOG10 |
tan |
VERİUZUNLUĞU |
MONTH |
YEAR |
DATEADD |
nullif |
|
Aşağıdaki işlevler, her zaman belirli değildir, ancak dizin oluşturulmuş görünümler veya hesaplanmış sütun dizinlerde, belirli bir biçimde belirlendiğinde kullanılabilir.
İşlev |
Açıklamalar |
---|---|
ATAMA |
Deterministic ile kullanılan sürece datetime, smalldatetime, veya sql_variant. |
ÇEVİR |
Bunlardan biri koşulları sürece Deterministic bulunmaktadır:
|
SAĞLAMA TOPLAMI |
Deterministic, sağlama toplamı(*) dışında. |
isdate |
Deterministic yalnızca, CONVERT işlev ile kullanıldığında, CONVERT stili parametresi belirtildi ve stili, 0, 100, 9 veya 109 eşit değil. |
S_SAYI_ÜRET |
Deterministic yalnızca when S_SAYı_ÜRET olan bir seed parametre belirtildi. |
Tüm yapılandırma, imleç, meta veriler, güvenlik ve sistem istatistik işlevleri nondeterministic var.Bu işlevlerin listesi için bkz: Yapılandırma işlevler (Transact-SQL), Imleç işlevler (Transact-SQL), Meta veriler işlevler (Transact-SQL), Güvenlik işlevleri (Transact-SQL), ve Sistem istatistik işlevleri (Transact-SQL).
Her zaman aşağıdaki yerleşik işlevler diğer kategorilerden nondeterministic olur.
@@ BAĞLANTILARI |
@@ total_read |
@@ cpu_busy |
@@ total_write |
@@ dbts |
current_timestamp |
@@ BOŞTA |
getdate |
@@ io_busy |
getutcdate |
@@ max_connections |
get_transmission_status |
@@ pack_received |
min_active_rowversion |
@@ pack_sent |
newid |
@@ packet_errors |
newsequentialid |
@@ timeticks |
S_SAYI_ÜRET |
@@ total_errors |
textptr |
Genişletilmiş arama yordamlar işlevler tarafından depolanan...
Genişletilmiş saklı yordamlar arama işlevleri, nondeterministic olduklarından genişletilmiş saklı yordamlar, veritabanı üzerinde yan etkilere neden olabilir.Genel bir durumu, veritabanı için bir güncelleştirme gibi değişiklikler yan etkileri olan bir tablo, örneğin, bir dosya için bir dosya veya; ağ gibi bir dış kaynak değiştirme veya bir e-posta iletisi göndererek.Genişletilmiş bir yürütürken ayarlamak tutarlı bir sonuç döndüren üzerinde güvenmemelisiniz saklı yordam kullanıcı tanımlı bir işlevi.Veritabanı üzerinde yan etkileri oluşturduğunuz kullanıcı tanımlı işlevler önerilmez.
Gelen içinde bir işlev çağrıldığında, genişletilmiş saklı yordam sonuç kümeleri için döndüremez istemci.Tüm açık Veri Hizmetleri istemciye sonuç kümeleri döndüren API bir dönüş kodu BAŞARıSıZ olacaktır.
Genişletilmiş saklı yordam yeniden bağlanabilir SQL Server. Ancak, yordamı genişletilmiş saklı yordam çağıran özgün işlev olarak aynı hareket katılamaz.
Benzer şekilde etkinleştirilmelerinde bir toplu iş veya saklı yordam, genişletilmiş saklı yordam bağlamında çalıştırılır Microsoft Hangi Windows Güvenlik hesabı SQL Server çalışıyor. Genişletilmiş saklı yordam sahibine bu yordamı çalıştırmak için diğer kullanıcıların izinleri verme, düşünmelisiniz.