Deterministik ve Nondeterministic işlevler
Deterministic işlevler her zaman onlar belirli bir giriş değerleri kümesiyle denilen ve veritabanını aynı durumu göz önüne alındığında, her zaman aynı sonucu döndürür. Nondeterministic işlevleri belirli bir giriş değerleri kümesiyle çağrıldıklarında eriştikleri veritabanı durumunu aynı kalır bile her zaman farklı sonuçlar döndürebilir.
Kullanıcı tanımlı işlevler, yeteneğini belirlemek çeşitli özellikler vardır SQL Server Veritabanı Altyapısıişlevini çağırır hesaplanmış sütunları dizinlerde veya işlev başvuru dizinlenmiş görünümler yoluyla işlevinin sonuçlarını indekslemek. Bir işlev determinism böyle bir özellik olduğunu. Örneğin, görünüme başvuran herhangi nondeterministic işlevleri kümelenmiş bir dizin bir görünüm oluşturulamıyor. İşlevler, determinizm, özellikleri hakkında daha fazla bilgi için bkz: Designing User-defined Functions.
Genişletilmiş saklı yordamlar çağrısı içeriyorsa bu konuda yerleşik sistem işlevleri determinism ve kullanıcı tanımlı işlevler deterministic özelliği üzerindeki etkisini tanımlar.
Yerleşik işlev Determinism
Herhangi bir yerleşik işlev determinism etkisi olamaz. Her yerleşik bir işlev deterministik veya nondeterministic nasıl işlev tarafından uygulanan Tarih SQL Server.
Toplama ve dize yerleşik işlevler deterministic değildir. Bu işlevlerin listesi için bkz: Toplama işlevleri (Transact-sql)ve Dize işlevler (Transact-sql).
Her zaman aşağıdaki yerleşik işlevleri toplama dışında yerleşik işlevleri ve dize işlevlerinin kategorilerden deterministic.
ABS |
DATEDIFF |
GÜÇ |
ACOS |
DAY |
RADYAN |
ASIN |
DERECE |
ROUND |
ATAN |
EXP |
İŞARETİ |
ATN2 |
KAT |
SIN |
TAVAN |
ISNULL |
KARE |
BİRLEŞİM |
ISNUMERİC |
SQRT |
COS |
LOG |
TAN |
COT |
LOG10 |
YEAR |
VERIUZUNLUĞU |
MONTH |
|
DATEADD |
NULLIF |
|
Aşağıdaki işlevler, zaman deterministic olmayan ama deterministik bir şekilde belirtildiğinde dizin oluşturulmuş görünümler veya hesaplanmış sütunları dizinlerde kullanılabilir.
İşlev |
Açıklamalar |
---|---|
OYUNCULAR |
Deterministik ile kullanılmadığı sürece datetime, smalldatetime, ya sql_variant. |
DÖNÜŞTÜRME |
Deterministic sürece bu bir hava var:
|
SAĞLAMA TOPLAMI |
Deterministik, dışında checksum(*). |
ISDATE |
Deterministik yalnızca convert işlevi ile kullanıldığında, convert stili parametresi belirtilen ve stili 0, 100, 9 veya 109 eşit değil. |
RAND |
RAND's deterministik sadece ne zaman bir seedparametresi belirtilirse. |
Tüm yapılandırma, imleç, meta verileri, güvenlik ve Sistem istatistik işlevleri nondeterministic. Bu işlevlerin listesi için bkz: Yapılandırma işlevler (Transact-sql), Imleç işlevler (Transact-sql), Meta veri işlevler (Transact-sql), Güvenlik işlevler (Transact-sql), ve Sistem istatistik işlevleri (Transact-sql).
Diğer kategoriler arasından aşağıdaki yerleşik işlevleri, her zaman nondeterministic.
@@ BAĞLANTILARI |
@@ TOTAL_WRITE |
@@ CPU_BUSY |
CURRENT_TIMESTAMP |
@@ DBTS |
GETDATE |
@@ BOŞTA |
GETUTCDATE |
@@ IO_BUSY |
GET_TRANSMISSION_STATUS |
@@ MAX_CONNECTIONS |
MIN_ACTIVE_ROWVERSION |
@@ PACK_RECEIVED |
NEWID |
@@ PACK_SENT |
NEWSEQUENTIALID |
@@ PACKET_ERRORS |
SONRAKİ DEĞERİ |
@@ TIMETICKS |
PARSENAME |
@@ TOTAL_ERRORS |
RAND |
@@ TOTAL_READ |
TEXTPTR |
İşlevlerden Genişletilmiş Saklı Yordamlar Çağırma
Genişletilmiş saklı yordamları çağıran işlev nondeterministic, çünkü genişletilmiş saklı yordamlar veritabanı üzerinde yan etkilere neden olabilir. Yan etkileri, veritabanı, tablo veya bir dosya ya da ağ gibi bir dış kaynak için bir güncelleştirme gibi küresel bir devlet için değişiklikler; Örneğin, bir dosyayı değiştirme veya e-posta iletisi gönderme. Tutarlı sonuç kümesindeki genişletilmiş saklı yordam kullanıcı tanımlı bir işlev yürütülürken dönen güvenmemelisiniz. Kullanıcı tanımlı işlevler, veritabanı üzerinde yan etkileri oluşturmak önerilmez.
Gelen işlev içinde çağrıldığında, genişletilmiş saklı yordam istemciye sonuç kümeleri döndüremez. Herhangi bir Aç veri Hizmetleri API istemciye sonuç kümeleri döndüren bir dönüş kodu başarısız olacaktır.
Genişletilmiş saklı yordam yeniden bağlanıp SQL Server. Ancak, yordam, genişletilmiş saklı yordamı çağıran özgün işlevi olarak aynı işlem katılamaz.
Benzer çağırmaları bir toplu iş veya saklı yordam, genişletilmiş saklı yordam bağlamında yürütülür Microsoftaltında Windows güvenlik hesabının SQL Serverçalışıyor. Genişletilmiş saklı yordam sahibi bu yordamı çalıştırmak için diğer kullanıcılara izin verme düşünmelisiniz.
Ayrıca bkz.
Kavramlar
NIB.Rewriting Stored Procedures as Functions
Diğer Kaynaklar
User-defined Function Design Guidelines