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:

  • Kaynak türü olan sql_variant.

  • Hedef türü olan sql_variantve kaynak türü nondeterministic.

  • Kaynak veya hedef türü datetimeya smalldatetime, diğer kaynak ya da hedef karakter dizesi türüdür ve nondeterministic stil belirtilir. Deterministik olması için stili parametresi bir sabit olmalıdır. Ayrıca, stilleri 100 küçük veya eşit dışında nondeterministic stilleri için 20 ve 21. Stilleri 100'den büyük stilleri dışında 106, 107, 109 ve 113, deterministic.

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

Table-valued User-defined Functions

Inline User-Defined Functions

Designing User-Defined Functions