Deterministische und nicht deterministische FunktionenDeterministic and Nondeterministic Functions

Gilt für: JaSQL Server JaAzure SQL-Datenbank NeinAzure Synapse Analytics (SQL DW) NeinParallel Data Warehouse APPLIES TO: yesSQL Server yesAzure SQL Database noAzure Synapse Analytics (SQL DW) noParallel Data Warehouse

Deterministische Funktionen geben bei jedem Aufrufen dasselbe Ergebnis zurück, wenn sie mit einem bestimmten Satz von Eingabewerten aufgerufen werden und die Datenbank denselben Status aufweist.Deterministic functions always return the same result any time they are called with a specific set of input values and given the same state of the database. Nicht deterministische Funktionen können bei jedem Aufrufen unterschiedliche Ergebnisse zurückgeben, wenn sie mit einem bestimmten Satz von Eingabewerten aufgerufen werden – selbst wenn die Datenbank, auf die zugegriffen wird, immer denselben Status aufweist.Nondeterministic functions may return different results each time they are called with a specific set of input values even if the database state that they access remains the same. Beispielsweise gibt die AVG-Funktion immer dasselbe Ergebnis zurück, sofern die zuvor genannten Bedingungen erfüllt sind. Die GETDATE-Funktion hingegen, die den aktuellen datetime-Wert liefert, gibt immer ein anderes Ergebnis zurück.For example, the function AVG always returns the same result given the qualifications stated above, but the GETDATE function, which returns the current datetime value, always returns a different result.

Benutzerdefinierte Funktionen weisen eine Reihe von Eigenschaften auf, mit denen festgelegt wird, ob das SQL Server-Datenbank-EngineSQL Server Database Engine in der Lage ist, die Ergebnisse der Funktion zu indizieren – entweder durch Indizes für berechnete Spalten, die die Funktion aufrufen, oder durch indizierte Sichten, die auf die Funktion verweisen.There are several properties of user-defined functions that determine the ability of the SQL Server-Datenbank-EngineSQL Server Database Engine to index the results of the function, either through indexes on computed columns that call the function, or through indexed views that reference the function. Der Determinismus einer Funktion ist eine solche Eigenschaft.The determinism of a function is one such property. Für eine Sicht kann z. B. kein gruppierter Index erstellt werden, falls die Sicht auf nicht deterministische Funktionen verweist.For example, a clustered index cannot be created on a view if the view references any nondeterministic functions. Weitere Informationen zu Eigenschaften von Funktionen, einschließlich Determinismus, finden Sie unter Benutzerdefinierte Funktionen.For more information about the properties of functions, including determinism, see User-Defined Functions.

In diesem Thema werden der Determinismus integrierter Systemfunktionen und die Auswirkungen auf die deterministische Eigenschaft benutzerdefinierter Funktionen erläutert, wenn in dieser ein Aufruf erweiterter gespeicherter Prozeduren enthalten ist.This topic identifies the determinism of built-in system functions and the effect on the deterministic property of user-defined functions when it contains a call to extended stored procedures.

Determinismus integrierter FunktionenBuilt-in Function Determinism

Der Determinismus integrierter Funktionen kann nicht beeinflusst werden.You cannot influence the determinism of any built-in function. Jede integrierte Funktion ist abhängig von deren Implementierung durch SQL ServerSQL Serverdeterministisch oder nicht deterministisch.Each built-in function is deterministic or nondeterministic based on how the function is implemented by SQL ServerSQL Server. Wenn beispielsweise eine ORDER BY-Klausel in einer Abfrage angegeben wird, wird der Determinismus einer in der Abfrage verwendeten Funktion nicht geändert.For example, specifying an ORDER BY clause in a query does not change the determinism of a function that is used in that query.

Alle integrierten Zeichenfolgenfunktionen sind deterministisch.All of the string built-in functions are deterministic. Eine Liste dieser Funktionen finden Sie unter Zeichenfolgenfunktionen (Transact-SQL).For a list of these functions, see String Functions (Transact-SQL).

Die folgenden integrierten Funktionen aus Kategorien anderer integrierter Funktionen als Zeichenfolgenfunktionen sind immer deterministisch:The following built-in functions from categories of built-in functions other than string functions are always deterministic.

ABSABS DATEDIFFDATEDIFF POWERPOWER
ACOSACOS DAYDAY RADIANSRADIANS
ASINASIN DEGREESDEGREES ROUNDROUND
ATANATAN EXPEXP SIGNSIGN
ATN2ATN2 FLOORFLOOR SINSIN
CEILINGCEILING ISNULLISNULL SQUARESQUARE
COALESCECOALESCE ISNUMERICISNUMERIC SQRTSQRT
COSCOS LOGLOG TANTAN
COTCOT LOG10LOG10 YEARYEAR
DATALENGTHDATALENGTH MONTHMONTH
DATEADDDATEADD NULLIFNULLIF

Die folgenden Funktionen sind nicht immer deterministisch, können jedoch in indizierten Sichten oder Indizes für berechnete Spalten verwendet werden, wenn sie als deterministische Funktion angegeben werden.The following functions are not always deterministic, but can be used in indexed views or indexes on computed columns when they are specified in a deterministic manner.

FunktionFunction KommentareComments
alle Aggregatfunktionenall aggregate functions Alle Aggregatfunktionen sind deterministisch, es sei denn, sie werden mit den OVER- und ORDER BY-Klauseln angegeben.All aggregate functions are deterministic unless they are specified with the OVER and ORDER BY clauses. Eine Liste dieser Funktionen finden Sie unter Aggregatfunktionen (Transact-SQL).For a list of these functions, see Aggregate Functions (Transact-SQL).
CASTCAST Deterministisch, wenn nicht mit datetime, smalldatetimeoder sql_variantverwendet.Deterministic unless used with datetime, smalldatetime, or sql_variant.
CONVERTCONVERT Deterministisch, wenn nicht eine der folgenden Bedingungen vorliegt:Deterministic unless one of these conditions exists:



Der Typ ist sql_variant.Source type is sql_variant.

Der Zieltyp ist sql_variant , und der Quelltyp ist nicht deterministisch.Target type is sql_variant and its source type is nondeterministic.

Der Quell- oder Zieltyp ist datetime oder smalldatetime, der andere Quell- oder Zieltyp ist eine Zeichenfolge, und es wird ein nicht deterministisches Format angegeben.Source or target type is datetime or smalldatetime, the other source or target type is a character string, and a nondeterministic style is specified. Ein deterministisches Format kann nur verwendet werden, wenn der style-Parameter konstant ist.To be deterministic, the style parameter must be a constant. Wenn die Werte für "style" kleiner oder gleich 100 sind, sind sie nicht deterministisch, mit Ausnahme der style-Werte 20 und 21.Additionally, styles less than or equal to 100 are nondeterministic, except for styles 20 and 21. style-Werte über 100 sind deterministisch, mit Ausnahme der style-Werte 106, 107, 109 und 113.Styles greater than 100 are deterministic, except for styles 106, 107, 109 and 113.
CHECKSUMCHECKSUM Deterministisch, mit Ausnahme von CHECKSUM(*).Deterministic, with the exception of CHECKSUM(*).
ISDATEISDATE Nur deterministisch in Verbindung mit der CONVERT-Funktion, wenn der style-Parameter von CONVERT angegeben ist und "style" nicht den Wert 0, 100, 9 oder 109 aufweist.Deterministic only if used with the CONVERT function, the CONVERT style parameter is specified and style is not equal to 0, 100, 9, or 109.
RANDRAND RAND ist nur deterministisch, wenn ein seed -Parameter angegeben wird.RAND is deterministic only when a seed parameter is specified.

Alle Konfigurations-, Cursor-, Metadaten-, Sicherheits- und statistischen Systemfunktionen sind nicht deterministisch.All the configuration, cursor, metadata, security, and system statistical functions are nondeterministic. Eine Liste dieser Funktionen finden Sie unter Konfigurationsfunktionen (Transact-SQL), Cursorfunktionen (Transact-SQL), Metadatenfunktionen (Transact-SQL), Sicherheitsfunktionen (Transact-SQL) und Statistische Systemfunktionen (Transact-SQL).For a list of these functions, see Configuration Functions (Transact-SQL), Cursor Functions (Transact-SQL), Metadata Functions (Transact-SQL), Security Functions (Transact-SQL), and System Statistical Functions (Transact-SQL).

Die folgenden integrierten Funktionen aus anderen Kategorien sind immer nicht deterministisch:The following built-in functions from other categories are always nondeterministic.

@@CONNECTIONS@@CONNECTIONS GETDATEGETDATE
@@CPU_BUSY@@CPU_BUSY GETUTCDATEGETUTCDATE
@@DBTS@@DBTS GET_TRANSMISSION_STATUSGET_TRANSMISSION_STATUS
@@IDLE@@IDLE LAGLAG
@@IO_BUSY@@IO_BUSY LAST_VALUELAST_VALUE
@@MAX_CONNECTIONS@@MAX_CONNECTIONS LEADLEAD
@@PACK_RECEIVED@@PACK_RECEIVED MIN_ACTIVE_ROWVERSIONMIN_ACTIVE_ROWVERSION
@@PACK_SENT@@PACK_SENT NEWIDNEWID
@@PACKET_ERRORS@@PACKET_ERRORS NEWSEQUENTIALIDNEWSEQUENTIALID
@@TIMETICKS@@TIMETICKS NEXT VALUE FORNEXT VALUE FOR
@@TOTAL_ERRORS@@TOTAL_ERRORS NTILENTILE
@@TOTAL_READ@@TOTAL_READ PARSENAMEPARSENAME
@@TOTAL_WRITE@@TOTAL_WRITE PERCENTILE_CONTPERCENTILE_CONT
AT TIME ZONEAT TIME ZONE PERCENTILE_DISCPERCENTILE_DISC
CUME_DISTCUME_DIST PERCENT_RANKPERCENT_RANK
CURRENT_TIMESTAMPCURRENT_TIMESTAMP RANDRAND
DENSE_RANKDENSE_RANK RANKRANK
FIRST_VALUEFIRST_VALUE ROW_NUMBERROW_NUMBER
FORMATFORMAT TEXTPTRTEXTPTR

Aufrufen erweiterter gespeicherter Prozeduren aus FunktionenCalling Extended Stored Procedures from Functions

Funktionen, die erweiterte gespeicherte Prozeduren aufrufen, sind nicht deterministisch, da erweiterte gespeicherte Prozeduren Nebeneffekte im Hinblick auf die Datenbank verursachen können.Functions that call extended stored procedures are nondeterministic, because the extended stored procedures can cause side effects on the database. Nebeneffekte sind Änderungen am globalen Status der Datenbank, wie z. B. ein Update einer Tabelle, oder an einer externen Ressource, wie z. B. einer Datei oder des Netzwerkes. Beispiel: Änderungen an einer Datei oder Senden einer E-Mail-Nachricht.Side effects are changes to a global state of the database, such as an update to a table, or to an external resource, such as a file or the network; for example, modifying a file or sending an e-mail message. Verlassen Sie sich nicht auf die Rückgabe eines konsistenten Resultsets, wenn Sie eine erweiterte gespeicherte Prozedur von einer benutzerdefinierten Funktion aus ausführen.Do not rely on returning a consistent result set when executing an extended stored procedure from a user-defined function. Die Verwendung benutzerdefinierter Funktionen, die zu Nebeneffekten hinsichtlich der Datenbank führen, wird nicht empfohlen.User-defined functions that create side effects on the database are not recommended.

Wenn eine erweiterte gespeicherte Prozedur aus einer Funktion heraus aufgerufen wird, kann die Prozedur keine Resultsets an den Client zurückgeben.When called from inside a function, the extended stored procedure cannot return result sets to the client. Jede Open Data Services-API, die Resultsets an den Client zurückgibt, weist den Rückgabecode FAIL auf.Any Open Data Services API that returns result sets to the client, has a return code of FAIL.

Die erweiterte gespeicherte Prozedur kann erneut eine Verbindung mit SQL ServerSQL Serverherstellen.The extended stored procedure can connect back to SQL ServerSQL Server. Die Prozedur kann jedoch keine Verbindung mit derselben Transaktion wie die ursprüngliche Funktion herstellen, durch die die erweiterte gespeicherte Prozedur aufgerufen wurde.However, the procedure cannot join the same transaction as the original function that invoked the extended stored procedure.

Wie bei Aufrufen von einem Batch oder einer gespeicherten Prozedur aus wird die erweiterte gespeicherte Prozedur im Kontext des MicrosoftMicrosoft Windows-Sicherheitskontos ausgeführt, unter dem SQL ServerSQL Server ausgeführt wird.Similar to invocations from a batch or stored procedure, the extended stored procedure is executed in the context of the MicrosoftMicrosoft Windows security account under which SQL ServerSQL Server is running. Der Besitzer der erweiterten gespeicherten Prozedur sollte diese Berechtigungen dieses Sicherheitskontexts berücksichtigen, wenn er anderen Benutzern Berechtigungen zum Ausführen der Prozedur erteilt.The owner of the extended stored procedure should consider the permissions of this security context, when granting permissions to other users to execute the procedure.