Unterstützte Funktionen für nativ kompilierte T-SQL-ModuleSupported Features for Natively Compiled T-SQL Modules

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

Dieses Thema listet die T-SQL-Oberflächenbereiche und unterstützten Funktionen im Hauptteil nativ kompilierter T-SQL-Module auf, wie gespeicherte Prozeduren (CREATE PROCEDURE (Transact-SQL)), benutzerdefinierte Skalarfunktionen, Inline-Tabellenwertfunktionen und Trigger.This topic contains a list of T-SQL surface area and supported features in the body of natively compiled T-SQL modules, such as stored procedures (CREATE PROCEDURE (Transact-SQL)), scalar user-defined functions, inline table-valued functions, and triggers.

Unterstützte Funktionen in der Definition der nativen Module finden Sie unter Unterstützte Konstrukte für systemintern kompilierte gespeicherte Prozeduren.For supported features around the definition of native modules, see Supported DDL for Natively Compiled T-SQL modules.

Vollständige Informationen zu nicht unterstützten Konstrukten sowie Informationen zu Umgehungslösungen zu einigen der nicht unterstützten Funktionen in nativ kompilierten Modulen finden Sie unter Migration Issues for Natively Compiled Stored Procedures(Migrationsprobleme bei nativ kompilierten gespeicherten Prozeduren).For complete information about unsupported constructs, and for information about how to work around some of the unsupported features in natively compiled modules, see Migration Issues for Natively Compiled Stored Procedures. Weitere Informationen zu nicht unterstützten Funktionen finden Sie unter Von In-Memory-OLTP nicht unterstützte Transact-SQL-Konstrukte.For more information about unsupported features, see Transact-SQL Constructs Not Supported by In-Memory OLTP.

Abfrageoberfläche in nativen ModulenQuery Surface Area in Native Modules

Die folgenden Abfragekonstrukte werden unterstützt:The following query constructs are supported:

CASE-Ausdruck: CASE kann in einer beliebigen Anweisung oder Klausel verwendet werden, die einen gültigen Ausdruck zulässt.CASE expression: CASE can be used in any statement or clause that allows a valid expression.

  • Gilt für: SQL Server 2017 (14.x)SQL Server 2017 (14.x)Applies to: SQL Server 2017 (14.x)SQL Server 2017 (14.x).
    Ab SQL Server 2017 (14.x)SQL Server 2017 (14.x) werden CASE-Anweisungen für nativ kompilierte T-SQL-Module unterstützt.Beginning with SQL Server 2017 (14.x)SQL Server 2017 (14.x), CASE statements are now supported for natively compiled T-SQL modules.

SELECT-Klausel:SELECT clause:

  • Aliase für Spalten und Namen (entweder mithilfe von AS oder = Syntax).Columns and name aliases (using either AS or = syntax).

  • Skalare UnterabfragenScalar subqueries

    • Gilt für: SQL Server 2016 (13.x)SQL Server 2016 (13.x)Applies to: SQL Server 2016 (13.x)SQL Server 2016 (13.x). Ab SQL Server 2016 (13.x)SQL Server 2016 (13.x) werden skalare Unterabfragen für nativ kompilierte T-SQL-Module unterstützt.Beginning with SQL Server 2016 (13.x)SQL Server 2016 (13.x), scalar subqueries are now supported in natively compiled modules.
  • TOP*TOP*

  • SELECT DISTINCTSELECT DISTINCT

    • Gilt für: SQL Server 2016 (13.x)SQL Server 2016 (13.x)Applies to: SQL Server 2016 (13.x)SQL Server 2016 (13.x). Ab SQL Server 2016 (13.x)SQL Server 2016 (13.x) CTP 1.1 wird der DISTINCT-Operator in nativ kompilierten Modulen unterstützt.Beginning with SQL Server 2016 (13.x)SQL Server 2016 (13.x), the DISTINCT operator is supported in natively compiled modules.

          DISTINCT aggregates are not supported.  
      
  • UNION und UNION ALLUNION and UNION ALL

    • Gilt für: SQL Server 2016 (13.x)SQL Server 2016 (13.x)Applies to: SQL Server 2016 (13.x)SQL Server 2016 (13.x). Ab SQL Server 2016 (13.x)SQL Server 2016 (13.x) CTP 1.1 werden die Operatoren UNION und UNION ALL in nativ kompilierten Modulen unterstützt.Beginning with SQL Server 2016 (13.x)SQL Server 2016 (13.x), UNION and UNION ALL operators are now supported in natively compiled modules.
  • VariablenzuweisungenVariable assignments

FROM-Klausel:FROM clause:

  • FROM <speicheroptimierte Tabelle oder TabellenvariableFROM <memory optimized table or table variable>

  • FROM <nativ kompilierte Inline-TVFFROM <natively compiled inline TVF>

  • LEFT OUTER JOIN, RIGHT OUTER JOIN, CROSS JOIN und INNER JOIN.LEFT OUTER JOIN, RIGHT OUTER JOIN, CROSS JOIN and INNER JOIN.

    • Gilt für: SQL Server 2016 (13.x)SQL Server 2016 (13.x)Applies to: SQL Server 2016 (13.x)SQL Server 2016 (13.x). Ab SQL Server 2016 (13.x)SQL Server 2016 (13.x) werden JOINS für nativ kompilierte T-SQL-Module unterstützt.Beginning with SQL Server 2016 (13.x)SQL Server 2016 (13.x), JOINS are now supported in natively compiled modules.
  • Unterabfragen [AS] table_alias.Subqueries [AS] table_alias. Weitere Informationen finden Sie unter FROM (Transact-SQL ).For more information, see FROM (Transact-SQL).

    • Gilt für: SQL Server 2016 (13.x)SQL Server 2016 (13.x)Applies to: SQL Server 2016 (13.x)SQL Server 2016 (13.x). Ab SQL Server 2016 (13.x)SQL Server 2016 (13.x) werden Unterabfragen für nativ kompilierte T-SQL-Module unterstützt.Beginning with SQL Server 2016 (13.x)SQL Server 2016 (13.x), Subqueries are now supported in natively compiled modules.

WHERE-Klausel:WHERE clause:

  • Filterprädikat IS [NOT] NULLFilter predicate IS [NOT] NULL

  • AND, BETWEENAND, BETWEEN

  • OR, NOT, IN, EXISTSOR, NOT, IN, EXISTS

    • Gilt für: SQL Server 2016 (13.x)SQL Server 2016 (13.x)Applies to: SQL Server 2016 (13.x)SQL Server 2016 (13.x). Ab SQL Server 2016 (13.x)SQL Server 2016 (13.x) werden die Operatoren OR, NOT, IN und EXISTS für nativ kompilierte T-SQL-Module unterstützt.Beginning with SQL Server 2016 (13.x)SQL Server 2016 (13.x), OR/NOT/IN/EXISTS operators are now supported in natively compiled modules.

GROUP BY -Klausel:GROUP BY clause:

  • Aggregatfunktionen AVG, COUNT, COUNT_BIG, MIN, MAX, und SUM.Aggregate functions AVG, COUNT, COUNT_BIG, MIN, MAX, and SUM.

  • MIN und MAX werden für die Typen nvarchar, char, varchar, varchar, vabinary und binary nicht unterstützt.MIN and MAX are not supported for types nvarchar, char, varchar, varchar, varbinary, and binary.

ORDER BY -Klausel:ORDER BY clause:

  • Es gibt keine Unterstützung für DISTINCT in der ORDER BY -Klausel.There is no support for DISTINCT in the ORDER BY clause.

  • Wird mit GROUP BY (Transact-SQL) unterstützt, wenn ein Ausdruck in der ORDER BY-Liste wörtlich in der GROUP BY-Liste angezeigt wird.Is supported with GROUP BY (Transact-SQL) if an expression in the ORDER BY list appears verbatim in the GROUP BY list.

    • Beispielsweise wird GROUP BY a + b ORDER BY a + b unterstützt, aber GROUP BY a, b ORDER BY a + b nicht.For example, GROUP BY a + b ORDER BY a + b is supported, but GROUP BY a, b ORDER BY a + b is not.

HAVING-Klausel:HAVING clause:

  • Unterliegt den gleichen Ausdruckseinschränkungen wie die WHERE-Klausel.Is subject to the same expression limitations as the WHERE clause.

ORDER BY und TOP werden in nativ kompilierten Modulen mit einigen Einschränkungen unterstützt.ORDER BY and TOP are supported in natively compiled modules, with some restrictions

  • Es gibt keine Unterstützung für WITH TIES oder PERCENT in der TOP -Klausel.There is no support for WITH TIES or PERCENT in the TOP clause.

  • Es gibt keine Unterstützung für DISTINCT in der ORDER BY -Klausel.There is no support for DISTINCT in the ORDER BY clause.

  • TOP in Kombination mit ORDER BY unterstützt höchstens den Wert 8.192 bei Verwendung einer Konstante in der TOP -Klausel.TOP combined with ORDER BY does not support more than 8,192 when using a constant in the TOP clause.

    • Dieser Grenzwert kann herabgesetzt werden, wenn die Abfrage Joins oder Aggregatfunktionen enthält.This limit may be lowered in case the query contains joins or aggregate functions. (Beispielsweise liegt die Beschränkung bei einem Join mit zwei Tabellen bei 4.096 Zeilen.(For example, with one join (two tables), the limit is 4,096 rows. Bei zwei Joins mit drei Tabellen lautet der Grenzwert 2.730 Zeilen).With two joins (three tables), the limit is 2,730 rows.)
    • Sie können Ergebnisse erhalten, die größer als 8.192 sind, indem Sie die Anzahl von Zeilen in einer Variablen speichern:You can obtain results greater than 8,192 by storing the number of rows in a variable:
DECLARE @v INT = 9000;
SELECT TOP (@v) ... FROM ... ORDER BY ...

Eine Konstante in der TOP -Klausel führt jedoch im Vergleich zur Verwendung einer Variablen zu einer besseren Leistung.However, a constant in the TOP clause results in better performance compared to using a variable.

Diese Einschränkungen für nativ kompilierte Transact-SQLTransact-SQL gelten nicht für den interpretierten Transact-SQLTransact-SQL -Zugriff auf speicheroptimierte Tabellen.These restrictions on natively compiled Transact-SQLTransact-SQL do not apply to interpreted Transact-SQLTransact-SQL access on memory-optimized tables.

DatenänderungData Modification

Die folgenden DML-Anweisungen werden unterstützt.The following DML statements are supported.

  • INSERT VALUES (eine Zeile pro Anweisung) und INSERT... SELECTINSERT VALUES (one row per statement) and INSERT ... SELECT

  • UPDATEUPDATE

  • DeleteDELETE

  • WHERE wird zusammen mit UPDATE- und DELETE-Anweisungen unterstützt.WHERE is supported with UPDATE and DELETE statements.

Sprachkonstrukte zur AblaufsteuerungControl-of-flow language

Die folgenden Sprachkonstrukte zur Ablaufsteuerung werden unterstützt.The following control-of-flow language constructs are supported.

Unterstützte OperatorenSupported Operators

Die folgenden Operatoren werden unterstützt.The following operators are supported.

  • Vergleichsoperatoren (Transact-SQL) (z.B. >, <, >=, und <=)Comparison Operators (Transact-SQL) (for example, >, <, >=, and <=)

  • Unäre Operatoren (+, -)Unary operators (+, -).

  • Binäre Operatoren (*, /, +, -, % (Modulo)).Binary operators (*, /, +, -, % (modulo)).

           The plus operator (+) is supported on both numbers and strings.  
    
  • Logische Operatoren (AND, OR, NOT).Logical operators (AND, OR, NOT).

  • Bitweise Operatoren ~, &, |, und ^Bitwise operators ~, &, |, and ^

  • APPLY-OperatorAPPLY operator

    • Gilt für: SQL Server 2017 (14.x)SQL Server 2017 (14.x)Applies to: SQL Server 2017 (14.x)SQL Server 2017 (14.x).
      Ab SQL Server 2017 (14.x)SQL Server 2017 (14.x) wird der APPLY-Operator in nativ kompilierten Modulen unterstützt.Beginning with SQL Server 2017 (14.x)SQL Server 2017 (14.x), the APPLY operator is supported in natively compiled modules.

Integrierte Funktionen in nativ kompilierten ModulenBuilt-in Functions in Natively Compiled Modules

Die folgenden Funktionen werden in Einschränkungen in speicheroptimierten Tabellen und in nativ kompilierten T-SQL-Modulen unterstützt.The following functions are supported in constraints on memory-optimized tables and in natively compiled T-SQL modules.

  • Mathematische Funktionen (Transact-SQL) (alle)All Mathematical Functions (Transact-SQL)

  • Datumsfunktionen: CURRENT_TIMESTAMP, DATEADD, DATEDIFF, DATEFROMPARTS, DATEPART, DATETIME2FROMPARTS, DATETIMEFROMPARTS, DAY, EOMONTH, GETDATE, GETUTCDATE, MONTH, SMALLDATETIMEFROMPARTS, SYSDATETIME, SYSUTCDATETIME und YEAR.Date functions: CURRENT_TIMESTAMP, DATEADD, DATEDIFF, DATEFROMPARTS, DATEPART, DATETIME2FROMPARTS, DATETIMEFROMPARTS, DAY, EOMONTH, GETDATE, GETUTCDATE, MONTH, SMALLDATETIMEFROMPARTS, SYSDATETIME, SYSUTCDATETIME, and YEAR.

  • Zeichenfolgenfunktionen: LEN, LTRIM, RTRIM und SUBSTRING.String functions: LEN, LTRIM, RTRIM, and SUBSTRING.

    • Gilt für: SQL Server 2017 (14.x)SQL Server 2017 (14.x)Applies to: SQL Server 2017 (14.x)SQL Server 2017 (14.x).
      Ab SQL Server 2017 (14.x)SQL Server 2017 (14.x) werden die folgenden integrierten Funktionen ebenfalls unterstützt: TRIM, TRANSLATE und CONCAT_WS.Beginning with SQL Server 2017 (14.x)SQL Server 2017 (14.x), the following built-in functions are also supported: TRIM, TRANSLATE, and CONCAT_WS.
  • Identitätsfunktionen: SCOPE_IDENTITYIdentity functions: SCOPE_IDENTITY

  • NULL-Funktionen: ISNULLNULL functions: ISNULL

  • Uniqueidentifier-Funktionen: NEWID und NEWSEQUENTIALIDUniqueidentifier functions: NEWID and NEWSEQUENTIALID

  • JSON-FunktionenJSON functions

    • Gilt für: SQL Server 2017 (14.x)SQL Server 2017 (14.x)Applies to: SQL Server 2017 (14.x)SQL Server 2017 (14.x).
      Ab SQL Server 2017 (14.x)SQL Server 2017 (14.x) werden die JSON-Funktionen in nativ kompilierten Modulen unterstützt.Beginning with SQL Server 2017 (14.x)SQL Server 2017 (14.x), the JSON functions are supported in natively compiled modules.
  • Fehlerfunktionen: ERROR_LINE, ERROR_MESSAGE, ERROR_NUMBER, ERROR_PROCEDURE, ERROR_SEVERITY und ERROR_STATEError functions: ERROR_LINE, ERROR_MESSAGE, ERROR_NUMBER, ERROR_PROCEDURE, ERROR_SEVERITY, and ERROR_STATE

  • Systemfunktionen: @@rowcount.System Functions: @@rowcount. Durch Anweisungen in nativ kompilierten gespeicherten Prozeduren wird @@rowcount aktualisiert, und Sie können @@rowcount in einer nativ kompilierten gespeicherten Prozedur verwenden, um die Anzahl der Zeilen zu bestimmen, die von der letzten Anweisung betroffen sind, die innerhalb der nativ kompilierten gespeicherten Prozedur ausgeführt wurde.Statements inside natively compiled stored procedures update @@rowcount and you can use @@rowcount in a natively compiled stored procedure to determine the number of rows affected by the last statement executed within that natively compiled stored procedure. Allerdings wird @@rowcount am Anfang und am Ende der Ausführung einer nativ kompilierten gespeicherten Prozedur auf 0 zurückgesetzt.However, @@rowcount is reset to 0 at the start and at the end of the execution of a natively compiled stored procedure.

  • Sicherheitsfunktionen: IS_MEMBER({'Gruppe' | 'Rolle'}), IS_ROLEMEMBER ('Rolle' [, 'database_principal']), IS_SRVROLEMEMBER ('Rolle' [, 'Anmeldename']), ORIGINAL_LOGIN(), SESSION_USER, CURRENT_USER, SUSER_ID(['Anmeldename']), SUSER_SID(['Anmeldename'] [, Param2]), SUSER_SNAME([server_user_sid]), SYSTEM_USER, SUSER_NAME, USER, USER_ID(['Benutzer']), USER_NAME([ID]), CONTEXT_INFO().Security functions: IS_MEMBER({'group' | 'role'}), IS_ROLEMEMBER ('role' [, 'database_principal']), IS_SRVROLEMEMBER ('role' [, 'login']), ORIGINAL_LOGIN(), SESSION_USER, CURRENT_USER, SUSER_ID(['login']), SUSER_SID(['login'] [, Param2]), SUSER_SNAME([server_user_sid]), SYSTEM_USER, SUSER_NAME, USER, USER_ID(['user']), USER_NAME([id]), CONTEXT_INFO().

  • Die Ausführungen nativer Module können geschachtelt werden.Executions of native modules can be nested.

ÜberwachenAuditing

Überwachung auf Prozedurebene wird für systemintern kompilierte gespeicherte Prozeduren unterstützt.Procedure level auditing is supported in natively compiled stored procedures.

Weitere Informationen zur Überwachung finden Sie unter Erstellen einer Serverüberwachung und Datenbanküberwachungsspezifikation.For more information about auditing, see Create a Server Audit and Database Audit Specification.

Tabellen- und AbfragehinweiseTable and Query Hints

Folgende werden unterstützt:The following are supported:

Weitere Informationen finden Sie unter Abfragehinweise (Transact-SQL).For more information, see Query Hints (Transact-SQL).

Einschränkungen bei der SortierungLimitations on Sorting

Sie können mehr als 8.000 Zeilen in einer Abfrage sortieren, die TOP (Transact-SQL) und eine ORDER BY-Klausel (Transact-SQL) verwendet.You can sort greater than 8,000 rows in a query that uses TOP (Transact-SQL) and an ORDER BY Clause (Transact-SQL). Ohne die ORDER BY-Klausel (Transact-SQL) kann TOP (Transact-SQL) eine Sortierung von bis zu 8.000 Zeilen durchführen (weniger Zeilen, falls es Verknüpfungen gibt).However, without ORDER BY Clause (Transact-SQL), TOP (Transact-SQL) can sort up to 8,000 rows (fewer rows if there are joins).

Wenn die Abfrage jeweils den Operator TOP (Transact-SQL) und eine ORDER BY-Klausel (Transact-SQL) verwendet, können Sie bis zu 8192 Zeilen für den TOP-Operator angeben.If your query uses both the TOP (Transact-SQL) operator and an ORDER BY Clause (Transact-SQL), you can specify up to 8192 rows for the TOP operator. Wenn Sie mehr als 8192 Zeilen angeben, wird die Fehlermeldung angezeigt: Msg 41398, Level 16, State 1, Procedure <ProzedurName> , Line <ZeilenNummer> Der Operator TOP kann maximal 8192 Zeilen zurückgeben; <Zahl> wurde angefordert.If you specify more than 8192 rows you get the error message: Msg 41398, Level 16, State 1, Procedure <procedureName>, Line <lineNumber> The TOP operator can return a maximum of 8192 rows; <number> was requested.

Wenn keine TOP-Klausel vorhanden ist, kann eine beliebige Anzahl von Zeilen mit ORDER BY sortiert werden.If you do not have a TOP clause, you can sort any number of rows with ORDER BY.

Wenn keine ORDER BY-Klausel verwendet wird, können Sie jeden ganzzahligen Wert mit dem TOP-Operator verwenden.If you do not use an ORDER BY clause, you can use any integer value with the TOP operator.

Beispiel mit TOP N = 8192: Wird kompiliertExample with TOP N = 8192: Compiles

CREATE PROCEDURE testTop  
WITH EXECUTE AS OWNER, SCHEMABINDING, NATIVE_COMPILATION  
  AS  
  BEGIN ATOMIC WITH (TRANSACTION ISOLATION LEVEL = SNAPSHOT, LANGUAGE = N'us_english')  
    SELECT TOP 8192 ShoppingCartId, CreatedDate, TotalPrice FROM dbo.ShoppingCart  
    ORDER BY ShoppingCartId DESC  
  END;  
GO  

Beispiel mit TOP N > 8192: Kann nicht kompiliert werdenExample with TOP N > 8192: Fails to compile.

CREATE PROCEDURE testTop  
WITH EXECUTE AS OWNER, SCHEMABINDING, NATIVE_COMPILATION  
  AS  
  BEGIN ATOMIC WITH (TRANSACTION ISOLATION LEVEL = SNAPSHOT, LANGUAGE = N'us_english')  
    SELECT TOP 8193 ShoppingCartId, CreatedDate, TotalPrice FROM dbo.ShoppingCart  
    ORDER BY ShoppingCartId DESC  
  END;  
GO  

Die Einschränkung auf 8192 Zeilen gilt nur für TOP N , wobei N wie in den Beispielen oben eine Konstante ist.The 8192 row limitation only applies to TOP N where N is a constant, as in the preceding examples. Wenn N größer als 8192 sein muss, können Sie den Wert einer Variablen zuweisen und die Variable mit TOPverwenden.If you need N greater than 8192 you can assign the value to a variable and use that variable with TOP.

Beispiel mit einer Variablen: Wird kompiliertExample using a variable: Compiles

CREATE PROCEDURE testTop  
WITH EXECUTE AS OWNER, SCHEMABINDING, NATIVE_COMPILATION  
  AS  
  BEGIN ATOMIC WITH (TRANSACTION ISOLATION LEVEL = SNAPSHOT, LANGUAGE = N'us_english')  
    DECLARE @v int = 8193   
    SELECT TOP (@v) ShoppingCartId, CreatedDate, TotalPrice FROM dbo.ShoppingCart  
    ORDER BY ShoppingCartId DESC  
  END;  
GO  

Einschränkungen für zurückgegebene Zeilen: Es gibt zwei Fälle, in denen sich die Anzahl der Zeilen, die vom TOP-Operator zurückgegeben werden können, u. U. verringert:Limitations on rows returned: There are two cases where that can potentially reduce the number of rows that can be returned by the TOP operator:

  • Verwenden von JOINs in der AbfrageUsing JOINs in the query. Die Auswirkungen von JOINs auf die Einschränkung sind vom Abfrageplan abhängig.The influence of JOINs on the limitation depends on the query plan.

  • Verwenden von Aggregatfunktionen oder Verweisen auf Aggregatfunktionen in der ORDER BY-KlauselUsing aggregate functions or references to aggregate functions in the ORDER BY clause.

Die Formel zum Berechnen eines im ungünstigsten Fall unterstützten Maximalwerts für N in TOP N lautet wie folgt: N = floor ( 65536 / number_of_tables * 8 + total_size+of+aggs ).The formula to calculate a worst case maximum supported N in TOP N is: N = floor ( 65536 / number_of_tables * 8 + total_size+of+aggs ).

Weitere InformationenSee Also

Nativ kompilierte gespeicherte Prozeduren Natively Compiled Stored Procedures
Migrationsprobleme bei nativ kompilierten gespeicherten ProzedurenMigration Issues for Natively Compiled Stored Procedures