Unterstützte Funktionen für nativ kompilierte T-SQL-Module

Gilt für: SQL Server Azure SQL-Datenbank Azure SQL Managed Instance

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.

Unterstützte Funktionen in der Definition der nativen Module finden Sie unter Unterstützte Konstrukte für systemintern kompilierte gespeicherte Prozeduren.

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). Weitere Informationen zu nicht unterstützten Funktionen finden Sie unter Von In-Memory-OLTP nicht unterstützte Transact-SQL-Konstrukte.

Abfrageoberfläche in nativen Modulen

Die folgenden Abfragekonstrukte werden unterstützt:

CASE-Ausdruck: CASE kann in einer beliebigen Anweisung oder Klausel verwendet werden, die einen gültigen Ausdruck zulässt.

  • Gilt für: SQL Server 2017 (14.x).
    Ab SQL Server 2017 (14.x) werden CASE-Anweisungen für nativ kompilierte T-SQL-Module unterstützt.

SELECT-Klausel:

  • Aliase für Spalten und Namen (entweder mithilfe von AS oder = Syntax).

  • Skalare Unterabfragen

    • Gilt für: SQL Server 2016 (13.x). Ab SQL Server 2016 (13.x) werden skalare Unterabfragen für nativ kompilierte T-SQL-Module unterstützt.
  • TOP*

  • SELECT DISTINCT

    • Gilt für: SQL Server 2016 (13.x). Ab SQL Server 2016 (13.x) wird der DISTINCT-Operator in nativ kompilierten Modulen unterstützt.

      • DISTINCT-Aggregate werden nicht unterstützt.
  • UNION und UNION ALL

    • Gilt für: SQL Server 2016 (13.x). Ab SQL Server 2016 (13.x) werden die Operatoren UNION und UNION ALL in nativ kompilierten Modulen unterstützt.
  • Variablenzuweisungen

FROM-Klausel:

  • FROM <speicheroptimierte Tabelle oder Tabellenvariable>

  • FROM <nativ kompilierte Inline-TVF>

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

    • Gilt für: SQL Server 2016 (13.x). Ab SQL Server 2016 (13.x) werden JOINS für nativ kompilierte T-SQL-Module unterstützt.
  • Unterabfragen [AS] table_alias. Weitere Informationen finden Sie unter FROM (Transact-SQL).

    • Gilt für: SQL Server 2016 (13.x). Ab SQL Server 2016 (13.x) werden Unterabfragen für nativ kompilierte T-SQL-Module unterstützt.

WHERE-Klausel:

  • Filterprädikat IS [NOT] NULL

  • AND, BETWEEN

  • OR, NOT, IN, EXISTS

    • Gilt für: SQL Server 2016 (13.x). Ab SQL Server 2016 (13.x) werden die Operatoren OR, NOT, IN und EXISTS für nativ kompilierte T-SQL-Module unterstützt.

GROUP BY -Klausel:

  • Aggregatfunktionen AVG, COUNT, COUNT_BIG, MIN, MAX, und SUM.

  • MIN und MAX werden für die Typen nvarchar, char, varchar, varchar, vabinary und binary nicht unterstützt.

ORDER BY -Klausel:

  • Es gibt keine Unterstützung für DISTINCT in der ORDER BY -Klausel.

  • 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.

    • Beispielsweise wird GROUP BY a + b ORDER BY a + b unterstützt, aber GROUP BY a, b ORDER BY a + b nicht.

HAVING-Klausel:

  • Unterliegt den gleichen Ausdruckseinschränkungen wie die WHERE-Klausel.

ORDER BY und TOP werden in nativ kompilierten Modulen mit einigen Einschränkungen unterstützt.

  • Es gibt keine Unterstützung für WITH TIES oder PERCENT in der TOP -Klausel.

  • Es gibt keine Unterstützung für DISTINCT in der ORDER BY -Klausel.

  • TOP in Kombination mit ORDER BY unterstützt höchstens den Wert 8.192 bei Verwendung einer Konstante in der TOP -Klausel.

    • Dieser Grenzwert kann herabgesetzt werden, wenn die Abfrage Joins oder Aggregatfunktionen enthält. (Beispielsweise liegt die Beschränkung bei einem Join mit zwei Tabellen bei 4.096 Zeilen. Bei zwei Joins mit drei Tabellen lautet der Grenzwert 2.730 Zeilen).
    • Sie können Ergebnisse erhalten, die größer als 8.192 sind, indem Sie die Anzahl von Zeilen in einer Variablen speichern:
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.

Diese Einschränkungen für nativ kompilierte Transact-SQL gelten nicht für den interpretierten Transact-SQL-Zugriff auf speicheroptimierte Tabellen.

Datenänderung

Die folgenden DML-Anweisungen werden unterstützt.

  • INSERT VALUES (eine Zeile pro Anweisung) und INSERT... SELECT

  • UPDATE

  • DELETE

  • WHERE wird zusammen mit UPDATE- und DELETE-Anweisungen unterstützt.

Sprachkonstrukte zur Ablaufsteuerung

Die folgenden Sprachkonstrukte zur Ablaufsteuerung werden unterstützt.

Unterstützte -Operatoren

Die folgenden Operatoren werden unterstützt.

  • Vergleichsoperatoren (Transact-SQL) (z. B. >, <, >= und <=)

  • Unäre Operatoren (+, -)

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

    • Der Plusoperator (+) wird in Zahlen und Zeichenfolgen unterstützt.
  • Logische Operatoren (AND, OR, NOT).

  • Bitweise Operatoren ~, &, |, und ^

  • APPLY-Operator

    • Gilt für: SQL Server 2017 (14.x).
      Ab SQL Server 2017 (14.x) wird der APPLY-Operator in nativ kompilierten Modulen unterstützt.

Integrierte Funktionen in nativ kompilierten Modulen

Die folgenden Funktionen werden in Einschränkungen in speicheroptimierten Tabellen und in nativ kompilierten T-SQL-Modulen unterstützt.

  • Alle mathematischen Funktionen (Transact-SQL)

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

  • Zeichenfolgenfunktionen: LEN, LTRIM, RTRIM und SUBSTRING.

    • Gilt für: SQL Server 2017 (14.x).
      Ab SQL Server 2017 (14.x) werden die folgenden integrierten Funktionen ebenfalls unterstützt: TRIM, TRANSLATE und CONCAT_WS.
  • Identitätsfunktionen: SCOPE_IDENTITY

  • NULL-Funktionen: ISNULL

  • Uniqueidentifier-Funktionen: NEWID und NEWSEQUENTIALID

  • JSON-Funktionen

    • Gilt für: SQL Server 2017 (14.x).
      Ab SQL Server 2017 (14.x) werden die JSON-Funktionen in nativ kompilierten Modulen unterstützt.
  • Fehlerfunktionen: ERROR_LINE, ERROR_MESSAGE, ERROR_NUMBER, ERROR_PROCEDURE, ERROR_SEVERITY und ERROR_STATE

  • Systemfunktionen: @@rowcount. Durch Anweisungen in systemintern kompilierten gespeicherten Prozeduren wird @@rowcount aktualisiert, und Sie können @@rowcount in einer systemintern kompilierten gespeicherten Prozedur verwenden, um die Anzahl der Zeilen zu bestimmen, die von der letzten Anweisung betroffen sind, die innerhalb der systemintern kompilierten gespeicherten Prozedur ausgeführt wurde. Allerdings wird @@rowcount am Anfang und am Ende der Ausführung einer systemintern kompilierten gespeicherten Prozedur auf 0 zurückgesetzt.

  • 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().

  • Die Ausführungen nativer Module können geschachtelt werden.

Überwachung

Überwachung auf Prozedurebene wird für systemintern kompilierte gespeicherte Prozeduren unterstützt.

Weitere Informationen zur Überwachung finden Sie unter Erstellen einer Serverüberwachung und Datenbanküberwachungsspezifikation.

Tabellen- und Abfragehinweise

Folgende werden unterstützt:

Weitere Informationen finden Sie unter Abfragehinweise (Transact-SQL).

Einschränkungen bei der Sortierung

Sie können mehr als 8.000 Zeilen in einer Abfrage sortieren, die TOP (Transact-SQL) und eine ORDER BY-Klausel (Transact-SQL) verwendet. 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).

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. 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.

Wenn keine TOP-Klausel vorhanden ist, kann eine beliebige Anzahl von Zeilen mit ORDER BY sortiert werden.

Wenn keine ORDER BY-Klausel verwendet wird, können Sie jeden ganzzahligen Wert mit dem TOP-Operator verwenden.

Beispiel mit TOP N = 8192: Wird kompiliert

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 werden

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. Wenn N größer als 8192 sein muss, können Sie den Wert einer Variablen zuweisen und die Variable mit TOPverwenden.

Beispiel mit einer Variablen: Wird kompiliert

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:

  • Verwenden von JOINs in der Abfrage Die Auswirkungen von JOINs auf die Einschränkung sind vom Abfrageplan abhängig.

  • Verwenden von Aggregatfunktionen oder Verweisen auf Aggregatfunktionen in der ORDER BY-Klausel

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 ).

Weitere Informationen

Nativ kompilierte gespeicherte Prozeduren
Migrationsprobleme bei systemintern kompilierten gespeicherten Prozeduren