Deterministic and Nondeterministic Functions

Deterministyczny zawsze zwracają ten sam wynik dowolnej czas wywołaniach z określonym zestaw wartości wejściowych i podać ten sam stanu bazy danych.Nondeterministic funkcji może zwracać różne wyniki są nazywane z określonym zestaw wartości wejściowych nawet wtedy, gdy stan bazy danych, które mają dostęp tylko do tych pozostaje bez zmian.

Istnieje kilka właściwości funkcja zdefiniowanych przez użytkownika, które określają zdolność SQL Server Database Engine Indeksowanie wyniki funkcja, za pomocą indeksów dla kolumny obliczane, które wywołują funkcja lub za pomocą widoków indeksowanych, które odwołują się do funkcja. Determinism funkcja jest jednej właściwość.Na przykład indeks klastrowany nie można utworzyć w widoku, jeżeli wszystkie funkcje nondeterministic odwołuje się do widoku.Aby uzyskać więcej informacji na temat właściwości funkcji, w tym determinism zobacz Wytyczne projekt funkcja zdefiniowana przez użytkownika.

W tym temacie identyfikuje determinism funkcji wbudowanych systemu i wpływ na deterministyczny właściwość, funkcji zdefiniowanych przez użytkownika, gdy zawiera ona wywołanie do rozszerzonych procedur przechowywanych.

Wbudowana funkcja Determinism

Nie może mieć wpływ determinism dowolnej funkcja wbudowanej.Każdy wbudowaną funkcją jest deterministyczny lub nondeterministic w oparciu o sposób implementacji funkcja przez SQL Server.

Wszystkie funkcje wbudowane agregacja i ciąg są deterministyczny.Aby uzyskać listę tych funkcji zobacz Aggregate Functions (Transact-SQL) i Funkcje ciągów języka Transact-SQL).

Następujące funkcje wbudowane z kategorii wbudowanych funkcji innych niż agregacja oraz funkcji ciągów są zawsze deterministyczny.

ABS

RÓŻNDAT

PARSENAME

ACOS

DZIEŃ

ZASILANIA

ASIN

STOPNIE

RADIANY

ATAN

EXP

ZAOKR

ATN2

PIĘTRA

ZNAK

SUFITU

ISNULL

SIN

sp_help_jobschedule

ISNUMERIC

KWADRAT

COS

DZIENNIK

PIERWIASTEK

KOT

LOG10

TAN

sp_add_operator

MIESIĄC

ROK

DATEADD

NULLIF

 

Następujące funkcje nie są zawsze deterministyczny, ale mogą być używane w widoków indeksowanych lub indeksów dla kolumny obliczanej, gdy są one określane w sposób deterministyczny.

Funkcja

Komentarze

OBSADA

Deterministyczny, chyba że używana z datetime, smalldatetime, lub sql_variant.

KONWERTOWANIE

Deterministic, chyba że jeden z tych warunków istnieje:

  • Typ urządzenie źródłowe jest sql_variant.

  • Typ miejsce docelowe jest sql_variant i jego typ urządzenie źródłowe jest nondeterministic.

  • Typ źródłowy lub miejsce docelowe jest datetime lub smalldatetime, innego typu źródłowego lub docelowego jest ciągiem znaków, a następnie określono nondeterministic stylu. Aby być deterministyczny, parametr stylu musi być stała.Ponadto style są mniejsze niż lub równe 100 nondeterministic, z wyjątkiem dla stylów, 20 i 21.Deterministyczny, chyba że w przypadku stylów 106, 107, 109 i 113 są style większe od 100.

SUMA KONTROLNA

Deterministyczny, z wyjątkiem suma kontrolna(*).

ISDATE

Parametr styl CONVERT deterministyczny tylko wtedy, gdy używana z funkcja konwersji, jest określony i styl nie jest równa 0, 100, 9 lub 109.

LOS

RAND jest deterministyczny tylko wtedy, gdy seed parametr jest określony.

Konfiguracja, kursor, metadane, zabezpieczeń, są wszystkie i funkcji statystycznych systemu nondeterministic.Aby uzyskać listę tych funkcji zobacz Konfiguracja funkcji języka Transact-SQL), Kursor funkcje języka Transact-SQL), Metadane funkcje języka Transact-SQL), Security Functions (Transact-SQL), a System Statistical Functions (Transact-SQL).

Następujące funkcje wbudowane od innych kategorii są zawsze nondeterministic.

@@ POŁĄCZENIA

@@ TOTAL_READ

@@ CPU_BUSY

@@ TOTAL_WRITE

@@ DBTS

CURRENT_TIMESTAMP

@@ BEZCZYNNOŚCI

GETDATE

@@ IO_BUSY

GETUTCDATE

@@ MAX_CONNECTIONS

GET_TRANSMISSION_STATUS

@@ PACK_RECEIVED

MIN_ACTIVE_ROWVERSION

@@ PACK_SENT

NEWID

@@ PACKET_ERRORS

NEWSEQUENTIALID

@@ TIMETICKS

LOS

@@ TOTAL_ERRORS

TEXTPTR

Wywołanie rozszerzonym przechowywane procedury z funkcje

Funkcje, które wymagają rozszerzone procedury przechowywane są nondeterministic, ponieważ rozszerzone procedury przechowywane mogą powodować efekty uboczne w bazie danych.Efekty w przypadku zmian we globalne stanu bazy danych, takich jak aktualizację do tabela lub do zasób zewnętrznych, na przykład pliku lub sieci, na przykład, modyfikacja pliku lub wysłanie wiadomości e-mail.Nie powinien zależeć zwracania wyniku spójne ustawiony podczas wykonywania rozszerzona procedura składowana z funkcja zdefiniowanej przez użytkownika.Funkcje zdefiniowane przez użytkownika, utworzyć efekty uboczne w bazie danych nie jest zalecane.

Po wywołaniu z wewnątrz funkcja, rozszerzona procedura składowana nie może zwrócić zestaw wyników do klient.Wszelkie Otwórz interfejsu API usług danych, które zwraca zestaw wyników do klient będzie miał kod zwracany przez nie powiodło się.

rozszerzona procedura składowana do połączenia się z powrotem SQL Server. Jednak procedury nie można dołączać do tej samej transakcji jako oryginalny funkcja, która wywołała rozszerzona procedura składowana.

Podobnie jak wywołania z partia lub procedury przechowywanej, rozszerzona procedura składowana jest wykonywany w kontekście Microsoft Konto zabezpieczeń systemu Windows, w jakich SQL Server jest uruchomiony. Właściciel rozszerzona procedura składowana należy wziąć pod uwagę to podczas udzielania uprawnienia do innych użytkowników, aby wykonać tę procedurę.