Share via


Ondersteunde functies voor systeemeigen gecompileerde T-SQL-modules

Van toepassing op:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

Dit onderwerp bevat een lijst met T-SQL-bereik en ondersteunde functies in de hoofdtekst van native gecompileerde T-SQL-modules, zoals opgeslagen procedures (CREATE PROCEDURE (Transact-SQL)), gebruikersgedefinieerde scalaire functies, inline-tabelwaardefuncties en triggers.

Zie Ondersteunde DDL voor systeemeigen T-SQL-modules voor ondersteunde functies rond de definitie van systeemeigen modules.

Zie Migratieproblemen voor systeemeigen gecompileerde opgeslagen procedures voor volledige informatie over niet-ondersteunde constructies en voor informatie over het omzeilen van enkele van de niet-ondersteunde functies in systeemeigen gecompileerde modules. Zie Transact-SQL Constructs Not Supported by In-Memory OLTP voor meer informatie over niet-ondersteunde functies.

Surface Area opvragen in systeemeigen modules

De volgende queryconstructies worden ondersteund:

CASE-expressie: CASE kan worden gebruikt in elke instructie of clausule die een geldige expressie toestaat.

  • Van toepassing op: SQL Server 2017 (14.x).
    Vanaf SQL Server 2017 (14.x) worden CASE-instructies nu ondersteund voor systeemeigen gecompileerde T-SQL-modules.

SELECT-clausule

  • Kolommen en naamaliasen (met de syntaxis AS of =).

  • Scalaire subquery's

    • Van toepassing op: SQL Server 2016 (13.x). Vanaf SQL Server 2016 (13.x) worden scalaire subquery's nu ondersteund in systeemeigen gecompileerde modules.
  • BOVEN*

  • SELECT DISTINCT

    • Van toepassing op: SQL Server 2016 (13.x). Vanaf SQL Server 2016 (13.x) wordt de operator DISTINCT ondersteund in systeemeigen gecompileerde modules.

      • DISTINCT-aggregaties worden niet ondersteund.
  • UNION en UNION ALL

    • Van toepassing op: SQL Server 2016 (13.x). Vanaf SQL Server 2016 (13.x) worden UNION- en UNION ALL-operators nu ondersteund in systeemeigen gecompileerde modules.
  • Variabele toewijzingen

FROM-clausule

  • Van < geheugen-geoptimaliseerde tabel of tabelvariabele>

  • VAN <systeemeigen gecompileerd inline TVF>

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

    • Van toepassing op: SQL Server 2016 (13.x). Vanaf SQL Server 2016 (13.x) worden JOINS nu ondersteund in systeemeigen gecompileerde modules.
  • Subqueries [AS] table_alias. Zie FROM (Transact-SQL)voor meer informatie.

    • Van toepassing op: SQL Server 2016 (13.x). Vanaf SQL Server 2016 (13.x) worden subquery's nu ondersteund in systeemeigen gecompileerde modules.

WHERE-clausule:

  • Filterpredicaat IS [NOT] NULL

  • EN, TUSSEN

  • OF, NIET, IN, BESTAAT

    • Van toepassing op: SQL Server 2016 (13.x). Vanaf SQL Server 2016 (13.x) worden OR/NOT/IN/EXISTS-operators nu ondersteund in systeemeigen gecompileerde modules.

GROUP BY-clausule :

  • Aggregatiefuncties AVG, COUNT, COUNT_BIG, MIN, MAX en SUM.

  • MIN en MAX worden niet ondersteund voor typen nvarchar, char, varchar, varchar, varbinary en binary.

ORDER BY-clausule

  • Er is geen ondersteuning voor DISTINCT in de ORDER BY-component .

  • Wordt ondersteund met GROUP BY (Transact-SQL) als een expressie in de LIJST ORDER BY letterlijk wordt weergegeven in de lijst GROUP BY.

    • Bijvoorbeeld, GROUP BY a + b ORDER BY a + b wordt ondersteund, maar GROUP BY a, b ORDER BY a + b niet.

HATING-clausule:

  • Is onderhevig aan dezelfde expressiebeperkingen als de WHERE-component.

ORDER BY en TOP worden ondersteund in systeemeigen gecompileerde modules, met enkele beperkingen

  • Er is geen ondersteuning voor WITH TIES of PERCENT in de TOP-clausule.

  • Er is geen ondersteuning voor DISTINCT in de ORDER BY-component .

  • TOP in combinatie met ORDER BY biedt geen ondersteuning voor meer dan 8.192 bij gebruik van een constante in de TOP-component .

    • Deze limiet kan worden verlaagd als de query joins of statistische functies bevat. (Met één join (twee tabellen) is de limiet bijvoorbeeld 4096 rijen. Met twee joins (drie tabellen) is de limiet 2.730 rijen.)
    • U kunt resultaten verkrijgen die groter zijn dan 8.192 door het aantal rijen in een variabele op te slaan:
DECLARE @v INT = 9000;
SELECT TOP (@v) ... FROM ... ORDER BY ...

Een constante in de TOP-component resulteert echter in betere prestaties in vergelijking met het gebruik van een variabele.

Deze beperkingen voor systeemeigen gecompileerde Transact-SQL zijn niet van toepassing op geïnterpreteerde Transact-SQL toegang tot tabellen die zijn geoptimaliseerd voor geheugen.

Gegevens wijzigen

De volgende DML-verklaringen worden ondersteund.

  • INSERT VALUES (een rij per statement) en INSERT ... SELECT

  • UPDATE

  • Verwijderen

  • WHERE wordt ondersteund met UPDATE- en DELETE-instructies.

Stroombeheertaal

De volgende stroombeheertaalconstructies worden ondersteund.

Ondersteunde operators

De volgende operators worden ondersteund.

  • Vergelijkingsoperatoren (Transact-SQL) (bijvoorbeeld >, <>=en <=)

  • Unaire operatoren (+, -).

  • Binaire operatoren (*, /, +, -, % (modulo)).

    • De plus-operator (+) wordt ondersteund voor zowel getallen als tekenreeksen.
  • Logische operators (AND, OR, NOT).

  • Bitsgewijze operatoren ~, &, |en ^

  • APPLY-operator

    • Van toepassing op: SQL Server 2017 (14.x).
      Vanaf SQL Server 2017 (14.x) wordt de OPERATOR APPLY ondersteund in systeemeigen gecompileerde modules.

Ingebouwde functies in systeemeigen gecompileerde modules

De volgende functies worden ondersteund in beperkingen voor tabellen die zijn geoptimaliseerd voor geheugen en in systeemeigen gecompileerde T-SQL-modules.

  • Alle wiskundige functies (Transact-SQL)

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

  • Tekenreeksfuncties: LEN, LTRIM, RTRIM en SUBSTRING.

    • Van toepassing op: SQL Server 2017 (14.x).
      Vanaf SQL Server 2017 (14.x) worden ook de volgende ingebouwde functies ondersteund: TRIM, TRANSLATE en CONCAT_WS.
  • Identiteitsfuncties: SCOPE_IDENTITY

  • NULL-functies: ISNULL

  • Uniqueidentifier-functies: NEWID en NEWSEQUENTIALID

  • JSON-functies

    • Van toepassing op: SQL Server 2017 (14.x).
      Vanaf SQL Server 2017 (14.x) worden de JSON-functies ondersteund in systeemeigen gecompileerde modules.
  • Foutfuncties: ERROR_LINE, ERROR_MESSAGE, ERROR_NUMBER, ERROR_PROCEDURE, ERROR_SEVERITY en ERROR_STATE

  • Systeemfuncties: @@rowcount. Instructies binnen systeemeigen gecompileerde opgeslagen procedures werken @@rowcount bij, en u kunt @@rowcount in een dergelijke procedure gebruiken om het aantal rijen te bepalen dat door de laatste binnen die procedure uitgevoerde instructie is beïnvloed. @@rowcount wordt echter opnieuw ingesteld op 0 aan het begin en aan het einde van de uitvoering van een systeemeigen gecompileerde opgeslagen procedure.

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

  • Uitvoeringen van systeemeigen modules kunnen worden genest.

Auditing

Controle op procedureniveau wordt ondersteund in systeemeigen gecompileerde opgeslagen procedures.

Zie Een servercontrole- en databasecontrolespecificatie maken voor meer informatie over controle.

Tabel en query hints

Het volgende wordt ondersteund:

Zie queryhints (Transact-SQL)voor meer informatie.

Beperkingen voor sorteren

U kunt meer dan 8000 rijen sorteren in een query die GEBRUIKMAAKT van TOP (Transact-SQL) en een ORDER BY-component (Transact-SQL). Zonder ORDER BY-component (Transact-SQL), kan TOP (Transact-SQL) echter maximaal 8000 rijen sorteren (minder rijen als er joins zijn).

Als uw query zowel de operator TOP (Transact-SQL) als een ORDER BY-component (Transact-SQL) gebruikt, kunt u maximaal 8192 rijen opgeven voor de operator TOP. Als u meer dan 8192 rijen opgeeft, krijgt u het foutbericht: Msg 41398, Level 16, State 1, Procedure <procedureName>, LineNumber<> De operator TOP kan maximaal 8192 rijen retourneren; <nummer> is aangevraagd.

Als u geen TOP-component hebt, kunt u een willekeurig aantal rijen sorteren met ORDER BY.

Als u geen ORDER BY-component gebruikt, kunt u een geheel getal gebruiken met de operator TOP.

Voorbeeld met TOP N = 8192: Compileert

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  

Voorbeeld met TOP N > 8192: kan niet worden gecompileerd.

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  

De 8192-rijbeperking is alleen van toepassing op TOP N waar N een constante is, zoals in de voorgaande voorbeelden. Als u meer dan 8192 nodig hebt N , kunt u de waarde toewijzen aan een variabele en deze variabele gebruiken met TOP.

Voorbeeld met behulp van een variabele: Compileert

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  

Beperkingen voor geretourneerde rijen: Er zijn twee gevallen waarin het aantal rijen dat kan worden geretourneerd door de operator TOP, kan verminderen:

  • JOINs gebruiken in de query. De invloed van JOINs op de beperking is afhankelijk van het queryplan.

  • Aggregatiefuncties of verwijzingen naar aggregatiefuncties gebruiken in de ORDER BY-clausule.

De formule voor het berekenen van een maximaal ondersteunde N in TOP N is: N = floor ( 65536 / number_of_tables * 8 + total_size+of+aggs ).

Zie ook

Systeemeigen gecompileerde opgeslagen procedures
Migratieproblemen voor systeemeigen gecompileerde opgeslagen procedures