Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Dieses Thema enthält eine Liste der unterstützten Features für nativ kompilierte gespeicherte Prozeduren (CREATE PROCEDURE (Transact-SQL)):
Programmierbarkeit in nativ kompilierten gespeicherten Prozeduren
Integrierte Funktionen in nativ kompilierten gespeicherten Prozeduren
Abfrageoberflächenbereich in nativ kompilierten gespeicherten Prozeduren
Informationen zu Datentypen, die in nativ kompilierten gespeicherten Prozeduren unterstützt werden, finden Sie unter "Unterstützte Datentypen".
Vollständige Informationen zu nicht unterstützten Konstrukten und Informationen zum Umgehen einiger nicht unterstützter Features in systemeigenen gespeicherten Prozeduren finden Sie unter Migrationsprobleme für nativ kompilierte gespeicherte Prozeduren. Weitere Informationen zu nicht unterstützten Features finden Sie unter Transact-SQL Konstrukte, die von In-Memory OLTP nicht unterstützt werden.
Programmierbarkeit in nativ kompilierten gespeicherten Prozeduren
Folgendes wird unterstützt:
BEGIN ATOMIC (auf der äußeren Ebene der gespeicherten Prozedur), LANGUAGE, ISOLATION LEVEL, DATEFORMAT und DATEFIRST.
Deklarieren von Variablen als NULL oder NOT NULL. Wenn eine Variable als NOT NULL deklariert wird, muss die Deklaration über einen Initialisierer verfügen. Wenn eine Variable nicht als NOT NULL deklariert wird, ist ein Initialisierer optional.
WENN und WHILE
EINFÜGEN/AKTUALISIEREN/LÖSCHEN
Unterabfragen werden nicht unterstützt. In der WHERE- oder HAVING-Klausel werden AND und BETWEEN unterstützt; OR, NOT und IN werden nicht unterstützt.
Speicheroptimierte Tabellentypen und Tabellenvariablen.
RÜCKGABE
AUSWÄHLEN
SET
TRY/CATCH/THROW
Verwenden Sie zum Optimieren der Leistung einen einzelnen TRY/CATCH-Block für eine vollständig nativ kompilierte gespeicherte Prozedur.
Unterstützte Operatoren
Die folgenden Operatoren werden unterstützt.
Vergleichsoperatoren (Transact-SQL) (z. B. >, , = <>und <=) werden in Bedingten (WENN, WHILE) unterstützt.
Unäre Operatoren (+, -).
Binäre Operatoren (*, /, +, -, % (Modulo)).
Der Plusoperator (+) wird sowohl für Zahlen als auch für Zeichenfolgen unterstützt.
Logische Operatoren (AND, OR, NOT). OR und NOT werden in IF- und WHILE-Anweisungen unterstützt, aber nicht in WHERE- oder HAVING-Klauseln.
Bitweise Operatoren ~, &, |und ^
Integrierte Funktionen in nativ kompilierten gespeicherten Prozeduren
Die folgenden Funktionen werden in Standardeinschränkungen für speicheroptimierte Tabellen und in nativ kompilierten gespeicherten Prozeduren unterstützt.
Mathematische Funktionen: ACOS, ASIN, ATAN, ATN2, COS, COT, GRAD, EXP, LOG, LOG10, PI, POWER, BOGENMAß, RAND, SIN, SQRT, SQUARE und TAN
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
Identitätsfunktion: SCOPE_IDENTITY
NULL-Funktionen: ISNULL
Funktionen für eindeutige Identifikatoren: NEWID und NEWSEQUENTIALID
Fehlerfunktionen: ERROR_LINE, ERROR_MESSAGE, ERROR_NUMBER, ERROR_PROCEDURE, ERROR_SEVERITY und ERROR_STATE
Konvertierungen: CAST und CONVERT. Konvertierungen zwischen Unicode- und Nicht-Unicode-Zeichenzeichenfolgen (n(var)char und (var)char) werden nicht unterstützt.
Systemfunktionen: @@rowcount. Anweisungen innerhalb nativ kompilierter gespeicherter Prozeduren aktualisieren @@rowcount, und Sie können @@rowcount in einer nativ kompilierten gespeicherten Prozedur verwenden, um die Zeilenanzahl zu bestimmen, die durch die letzte innerhalb dieser gespeicherten Prozedur ausgeführte Anweisung betroffen sind. @@rowcount wird jedoch am Anfang und am Ende der Ausführung einer nativ kompilierten gespeicherten Prozedur auf 0 zurückgesetzt.
Abfrageoberflächenbereich in nativ kompilierten gespeicherten Prozeduren
Folgendes wird unterstützt:
ZWISCHEN
Alias für Spaltennamen (mit entweder AS oder = Syntax).
CROSS JOIN und INNER JOIN werden nur mit SELECT-Abfragen unterstützt.
Ausdrücke werden in der SELECT-Liste und WHERE (Transact-SQL)-Klausel unterstützt, wenn sie einen unterstützten Operator verwenden. Die Liste der derzeit unterstützten Operatoren finden Sie unter "Unterstützte Operatoren ".
Filter-Prädikat IS [NOT] NULL
Aus speicheroptimierte Tabelle<>
GROUP BY (Transact-SQL) wird zusammen mit den Aggregatfunktionen AVG, COUNT, COUNT_BIG, MIN, MAX und SUMME unterstützt. MIN und MAX werden für die Typen nvarchar, char, varchar, varbinary und binary nicht unterstützt. ORDER BY-Klausel (Transact-SQL) 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 wird nicht unterstützt.
Die HAVING-Klausel unterliegt denselben Ausdruckseinschränkungen wie die WHERE-Klausel.
INSERT VALUES (eine Zeile pro Anweisung) und INSERT SELECT
BESTELLUNG NACH 1
Prädikate, die sich nicht auf eine Spalte beziehen.
SELECT, UPDATE und DELETE
TOP 1
Variable Zuordnung in der SELECT-Liste.
WO... UND
1 ORDER BY und TOP werden in nativ kompilierten gespeicherten Prozeduren mit einigen Einschränkungen unterstützt:
Es gibt keine Unterstützung für
DISTINCTin derSELECT- oderORDER BY-Klausel.Es gibt keine Unterstützung für
WITH TIESoderPERCENTin derTOPKlausel.TOPkombiniert mitORDER BYunterstützt nicht mehr als 8.192, wenn eine Konstante in derTOP-Klausel verwendet wird. Dieser Grenzwert kann verringert werden, wenn die Abfrage Verknüpfungen oder Aggregatfunktionen enthält. (Bei einer Verknüpfung (zwei Tabellen) beträgt der Grenzwert beispielsweise 4.096 Zeilen. Bei zwei Verknüpfungen (drei Tabellen) beträgt der Grenzwert 2.730 Zeilen.)Sie können Ergebnisse von mehr als 8.192 erhalten, indem Sie die Anzahl der Zeilen in einer Variablen speichern:
DECLARE @v INT = 9000 SELECT TOP (@v) ... FROM ... ORDER BY ...
Eine Konstante in der TOP Klausel führt jedoch zu einer besseren Leistung im Vergleich zur Verwendung einer Variablen.
Diese Einschränkungen gelten nicht für interpretierten Transact-SQL-Zugriff auf speicheroptimierte Tabellen.
Überwachung
Die Überwachung auf Prozedurebene wird in nativ kompilierten gespeicherten Prozeduren unterstützt. Überwachung auf Anweisungsebene wird nicht unterstützt.
Weitere Informationen zur Überwachung finden Sie unter Erstellen einer Serverüberwachungs- und Datenbanküberwachungsspezifikation.
Hinweise zu Tabellen, Abfragen und Verknüpfungen
Folgendes wird unterstützt:
INDEX-, FORCESCAN- und FORCESEEK-Hinweise, entweder in Tabellenhinweisssyntax oder in OPTION-Klausel (Transact-SQL) der Abfrage.
ERZWINGUNGSREIHENFOLGE
INNER-LOOP-Verknüpfung (INNER LOOP JOIN)
OPTIMIEREN FÜR
Weitere Informationen finden Sie unter Hints (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 OPERATOR TOP (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 Sie keine TOP-Klausel haben, können Sie eine beliebige Anzahl von Zeilen mit ORDER BY sortieren.
Wenn Sie keine ORDER BY-Klausel verwenden, können Sie einen beliebigen ganzzahligen Wert mit dem TOP-Operator verwenden.
Beispiel mit TOP N = 8192: 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 Zeilenbeschränkung von 8192 gilt nur für TOP N, wenn N eine Konstante ist, wie in den vorherigen Beispielen. Wenn Sie mehr als 8192 benötigen N , können Sie den Wert einer Variablen zuweisen und diese Variable mit TOPverwenden.
Beispiel für eine Variable: Kompilieren
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 die Anzahl der Zeilen, die vom TOP-Operator zurückgegeben werden können, potenziell reduziert werden kann:
Verwenden von JOINs in der Abfrage. Der Einfluss von JOINs auf die Einschränkung hängt vom Abfrageplan ab.
Verwenden von Aggregatfunktionen oder Verweisen auf Aggregatfunktionen in der ORDER BY-Klausel.
Die Formel zum Berechnen eines Worst-Case-Maximums des unterstützten N im TOP-N-Szenario lautet: N = floor ( 65536 / number_of_tables * 8 + total_size+of+aggs ).
Siehe auch
Nativ kompilierte gespeicherte Prozeduren
Migrationsprobleme für nativ kompilierte gespeicherte Prozeduren