Unterstützte Funktionen für nativ kompilierte T-SQL-Module
Gilt für:SQL ServerAzure SQL-DatenbankAzure 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 jetzt für systemeigene 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 jetzt in nativen kompilierten Modulen unterstützt.
TOP*
SELECT DISTINCT
Gilt für: SQL Server 2016 (13.x). Ab SQL Server 2016 (13.x) wird der DISTINCT-Operator in systemeigenen 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 UNION und UNION ALL-Operatoren jetzt in nativen kompilierten Modulen unterstützt.
Variablenzuweisungen
FROM-Klausel:
From <memory optimized table or table variable>
FROM <nativ kompiliert inline TVF>
LEFT OUTER JOIN, RIGHT OUTER JOIN, CROSS JOIN und INNER JOIN.
- Gilt für: SQL Server 2016 (13.x). Beginnend mit SQL Server 2016 (13.x) werden JOINS jetzt in systemeigenen kompilierten Modulen 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 jetzt in systemeigenen kompilierten Modulen 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 OR/NOT/IN/EXISTS-Operatoren jetzt in systemeigenen kompilierten Modulen 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 LISTE ORDER BY in der LISTE GROUP BY verbatim 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 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.
DECLARE @local_variable (Transact-SQL) kann alle unterstützten Datentypen für IN-Memory OLTP sowie speicheroptimierte Tabellentypen verwenden. Variablen können als NULL oder NOT NULL deklariert werden.
-
- Sie können einen einzelnen TRY/CATCH-Block für ein ganzes nativ kompiliertes T-SQL-Modul verwenden, um die optimale Leistung zu erzielen.
BEGIN ATOMIC (auf der äußeren Ebene der gespeicherten Prozedur). Weitere Informationen finden Sie unter ATOMIC-Blöcke.
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 systemeigenen kompilierten Modulen unterstützt.
- Gilt für: SQL Server 2017 (14.x).
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.
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 auch die folgenden integrierten Funktionen unterstützt: TRIM, TRANSLATE und CONCAT_WS.
- Gilt für: SQL Server 2017 (14.x).
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 systemeigenen kompilierten Modulen unterstützt.
- Gilt für: SQL Server 2017 (14.x).
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:
INDEX-, FORCESCAN- und FORCESEEK-Hinweise, entweder in Tabellenhinweisssyntax oder in OPTION-Klausel (Transact-SQL) der Abfrage. Weitere Informationen finden Sie unter Tabellenhinweise (Transact-SQL).
FORCE ORDER
LOOP JOIN-Hinweis
OPTIMIZE FOR
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 ORDER BY-Klausel (Transact-SQL) kann TOP (Transact-SQL) jedoch bis zu 8.000 Zeilen sortieren (weniger Zeilen, wenn Verknüpfungen vorhanden sind).
Wenn Ihre Abfrage sowohl den TOP-Operator (Transact-SQL) als auch 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, erhalten Sie die Fehlermeldung: Msg 41398, Level 16, State 1, Procedure procedureName<>, Line< lineNumber> Der TOP-Operator kann maximal 8192 Zeilen zurückgeben; <Die Nummer> 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: Fehler beim Kompilieren.
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 TOP
verwenden.
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
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für