Funzionalità supportate per i moduli T-SQL compilati in modo nativoSupported Features for Natively Compiled T-SQL Modules

QUESTO ARGOMENTO SI APPLICA A:sìSQL Server (a partire dalla versione 2014)sìDatabase SQL di AzurenoAzure SQL Data Warehouse noParallel Data Warehouse THIS TOPIC APPLIES TO:yesSQL Server (starting with 2014)yesAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse

Questo argomento contiene un elenco delle superfici di attacco e delle funzionalità supportate di T-SQL nei moduli di T-SQL compilati in modo nativo, ad esempio stored procedure (CREATE PROCEDURE (Transact-SQL)), funzioni scalari definite dall'utente, funzioni inline con valori di tabella e 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.

Per le funzionalità supportate relative alla definizione dei moduli nativi, vedere Supported DDL for Natively Compiled T-SQL modules(DDL supportate per moduli T-SQL compilati in modo nativo).For supported features around the definition of native modules, see Supported DDL for Natively Compiled T-SQL modules.

Superficie di attacco delle query nei moduli nativi Query Surface Area in Native Modules

Sono supportati i costrutti delle query indicati di seguito:The following query constructs are supported:

Espressione CASE: CASE può essere utilizzata in qualsiasi istruzione o clausola che consenta un'espressione valida.CASE expression: CASE can be used in any statement or clause that allows a valid expression.

  • Si applica a: SQL Server vNextSQL Server vNext(DDL supportate per moduli T-SQL compilati in modo nativo).Applies to: SQL Server vNextSQL Server vNext.
    A partire da SQL Server vNextSQL Server vNext, le istruzioni CASE sono supportate per i moduli T-SQL compilati in modo nativo.Beginning with SQL Server vNextSQL Server vNext, CASE statements are now supported for natively compiled T-SQL modules.

Clausola SELECT:SELECT clause:

  • Alias di nomi e colonne (usando la sintassi AS o =).Columns and name aliases (using either AS or = syntax).

  • Sottoquery scalariScalar subqueries

    • Si applica a: SQL Server 2016SQL Server 2016(DDL supportate per moduli T-SQL compilati in modo nativo).Applies to: SQL Server 2016SQL Server 2016. A partire da SQL Server 2016SQL Server 2016, le sottoquery scalari sono supportate per i moduli compilati in modo nativo.Beginning with SQL Server 2016SQL Server 2016, scalar subqueries are now supported in natively compiled modules.
  • TOPTOP

  • SELECT DISTINCTSELECT DISTINCT

    • Si applica a: SQL Server 2016SQL Server 2016(DDL supportate per moduli T-SQL compilati in modo nativo).Applies to: SQL Server 2016SQL Server 2016. A partire da SQL Server 2016SQL Server 2016, l'operatore DISTINCT è supportato in moduli compilati in modo nativo.Beginning with SQL Server 2016SQL Server 2016, the DISTINCT operator is supported in natively compiled modules.

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

    • Si applica a: SQL Server 2016SQL Server 2016(DDL supportate per moduli T-SQL compilati in modo nativo).Applies to: SQL Server 2016SQL Server 2016. A partire da SQL Server 2016SQL Server 2016, gli operatori UNION e UNION ALL sono supportati in moduli compilati in modo nativo.Beginning with SQL Server 2016SQL Server 2016, UNION and UNION ALL operators are now supported in natively compiled modules.
  • Assegnazioni di variabiliVariable assignments

Clausola FROM:FROM clause:

  • FROM <tabella o variabile di tabella ottimizzata per la memoria>FROM <memory optimized table or table variable>

  • FROM <funzione con valori di tabella inline compilata in modo nativo>FROM <natively compiled inline TVF>

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

    • Si applica a: SQL Server 2016SQL Server 2016(DDL supportate per moduli T-SQL compilati in modo nativo).Applies to: SQL Server 2016SQL Server 2016. A partire da SQL Server 2016SQL Server 2016, gli operatori JOINS sono supportati in moduli compilati in modo nativo.Beginning with SQL Server 2016SQL Server 2016, JOINS are now supported in natively compiled modules.
  • Sottoquery [AS] table_alias.Subqueries [AS] table_alias. Per altre informazioni, vedere FROM (Transact-SQL).For more information, see FROM (Transact-SQL).

    • Si applica a: SQL Server 2016SQL Server 2016(DDL supportate per moduli T-SQL compilati in modo nativo).Applies to: SQL Server 2016SQL Server 2016. A partire da SQL Server 2016SQL Server 2016, le sottoquery sono supportate in moduli compilati in modo nativo.Beginning with SQL Server 2016SQL Server 2016, Subqueries are now supported in natively compiled modules.

Clausola WHERE:WHERE clause:

  • Predicato del filtro IS [NOT] NULLFilter predicate IS [NOT] NULL

  • AND, BETWEENAND, BETWEEN

  • OR, NOT, IN, EXISTSOR, NOT, IN, EXISTS
    • Si applica a: SQL Server 2016SQL Server 2016(DDL supportate per moduli T-SQL compilati in modo nativo).Applies to: SQL Server 2016SQL Server 2016. A partire da SQL Server 2016SQL Server 2016, gli operatori OR/NOT/IN/EXISTS sono supportati in moduli compilati in modo nativo.Beginning with SQL Server 2016SQL Server 2016, OR/NOT/IN/EXISTS operators are now supported in natively compiled modules.

ClausolaGROUP BY :GROUP BY clause:

  • Funzioni di aggregazione AVG, COUNT, COUNT_BIG, MIN, MAX e SUM.Aggregate functions AVG, COUNT, COUNT_BIG, MIN, MAX, and SUM.

  • MIN e MAX non sono supportate per i tipi nvarchar, char, varchar, varchar, varbinary e binary.MIN and MAX are not supported for types nvarchar, char, varchar, varchar, varbinary, and binary.

ClausolaORDER BY :ORDER BY clause:

  • DISTINCT non è supportato nella clausola ORDER BY .There is no support for DISTINCT in the ORDER BY clause.

  • Supportata con GROUP BY (Transact-SQL) se un'espressione nell'elenco ORDER BY appare in modo identico nell'elenco GROUP BY.Is supported with GROUP BY (Transact-SQL) if an expression in the ORDER BY list appears verbatim in the GROUP BY list.

    • Ad esempio, l'espressione GROUP BY a + b ORDER BY a + b è supportata, ma GROUP BY a, b ORDER BY a + b non lo è.For example, GROUP BY a + b ORDER BY a + b is supported, but GROUP BY a, b ORDER BY a + b is not.

Clausola HAVING:HAVING clause:

  • Soggetta alle stesse limitazioni delle espressioni della clausola WHERE.Is subject to the same expression limitations as the WHERE clause.

ORDER BY e TOP sono supportati nei moduli compilati in modo nativo con alcune limitazioniORDER BY and TOP are supported in natively compiled modules, with some restrictions

  • WITH TIES o PERCENT non è supportata nella clausola TOP .There is no support for WITH TIES or PERCENT in the TOP clause.

  • DISTINCT non è supportato nella clausola ORDER BY .There is no support for DISTINCT in the ORDER BY clause.

  • TOP in combinazione con ORDER BY non supporta un valore superiore a 8.192 quando si utilizza una costante nella clausola TOP .TOP combined with ORDER BY does not support more than 8,192 when using a constant in the TOP clause.

    • Questo limite può risultare più basso nel caso in cui la query contenga funzioni di aggregazione o dei join.This limit may be lowered in case the query contains joins or aggregate functions. Ad esempio, con un join (due tabelle) il limite scende a 4.096 righe.(For example, with one join (two tables), the limit is 4,096 rows. Con due join (tre tabelle) il limite è 2.730 righe.With two joins (three tables), the limit is 2,730 rows.)
    • È possibile che si ottengano risultati maggiori di 8.192 archiviando il numero di righe in una variabile: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 …

Tuttavia, una costante nella clausola TOP assicura prestazioni migliori rispetto a una variabile.However, a constant in the TOP clause results in better performance compared to using a variable.

Queste limitazioni di Transact-SQLTransact-SQL non si applicano all'accesso Transact-SQLTransact-SQL interpretato nelle tabelle con ottimizzazione per la memoria.These restrictions on natively compiled Transact-SQLTransact-SQL do not apply to interpreted Transact-SQLTransact-SQL access on memory-optimized tables.

Modifica dei dati Data Modification

Sono supportate le istruzioni DML seguenti.The following DML statements are supported.

  • INSERT VALUES (una riga per istruzione) e INSERT ... SELECTINSERT VALUES (one row per statement) and INSERT ... SELECT

  • UPDATEUPDATE

  • DELETEDELETE

  • La clausola WHERE è supportata con le istruzioni UPDATE e DELETE.WHERE is supported with UPDATE and DELETE statements.

Elementi del linguaggio per il controllo di flusso Control-of-flow language

Sono supportati i seguenti costrutti degli elementi del linguaggio per il controllo di flusso.The following control-of-flow language constructs are supported.

Operatori supportati Supported Operators

Di seguito vengono elencati gli operatori supportati.The following operators are supported.

  • Operatori di confronto (Transact-SQL) (ad esempio >, <, >= e <=)Comparison Operators (Transact-SQL) (for example, >, <, >=, and <=)

  • Operatori unari (+, -).Unary operators (+, -).

  • Operatori binari (, /, +, -, % (modulo)).Binary operators (, /, +, -, % (modulo)).

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

  • Operatori bit per bit ~, &, | e ^Bitwise operators ~, &, |, and ^

  • APPLY - operatoreAPPLY operator

    • Si applica a: SQL Server vNextSQL Server vNext CTP 1.1.Applies to: SQL Server vNextSQL Server vNext CTP 1.1.
      A partire da SQL Server vNextSQL Server vNext CTP 1.1, l'operatore APPLY è supportato nei moduli compilati in modo nativo.Beginning with SQL Server vNextSQL Server vNext CTP 1.1, the APPLY operator is supported in natively compiled modules.

Funzioni integrate nei moduli compilati in modo nativo Built-in Functions in Natively Compiled Modules

Le seguenti funzioni sono supportate nei vincoli nelle tabelle con ottimizzazione per la memoria e nei moduli T-SQL compilati in modo nativo.The following functions are supported in constraints on memory-optimized tables and in natively compiled T-SQL modules.

  • Tutte le funzioni matematiche (Transact-SQL)All Mathematical Functions (Transact-SQL)

  • Funzioni di data: CURRENT_TIMESTAMP, DATEADD, DATEDIFF, DATEFROMPARTS, DATEPART, DATETIME2FROMPARTS, DATETIMEFROMPARTS, DAY, EOMONTH, GETDATE, GETUTCDATE, MONTH, SMALLDATETIMEFROMPARTS, SYSDATETIME, SYSUTCDATETIME e YEAR.Date functions: CURRENT_TIMESTAMP, DATEADD, DATEDIFF, DATEFROMPARTS, DATEPART, DATETIME2FROMPARTS, DATETIMEFROMPARTS, DAY, EOMONTH, GETDATE, GETUTCDATE, MONTH, SMALLDATETIMEFROMPARTS, SYSDATETIME, SYSUTCDATETIME, and YEAR.

  • Funzioni stringa: LEN, LTRIM, RTRIM e SUBSTRING.String functions: LEN, LTRIM, RTRIM, and SUBSTRING.

    • Si applica a: SQL Server vNextSQL Server vNext CTP 1.1.Applies to: SQL Server vNextSQL Server vNext CTP 1.1.
      A partire da SQL Server vNextSQL Server vNext CTP 1.1, sono supportate anche le funzioni integrate seguenti: TRIM, TRANSLATE e CONCAT_WS.Beginning with SQL Server vNextSQL Server vNext CTP 1.1, the following built-in functions are also supported: TRIM, TRANSLATE, and CONCAT_WS.
  • Funzione di identità: SCOPE_IDENTITYIdentity functions: SCOPE_IDENTITY

  • Funzioni NULL: ISNULLNULL functions: ISNULL

  • Funzioni di identificazione univoca: NEWID e NEWSEQUENTIALIDUniqueidentifier functions: NEWID and NEWSEQUENTIALID

  • Funzioni JSONJSON functions

    • Si applica a: SQL Server vNextSQL Server vNext CTP 1.1.Applies to: SQL Server vNextSQL Server vNext CTP 1.1.
      A partire da SQL Server vNextSQL Server vNext CTP 1.1, le funzioni JSON sono supportate nei moduli compilati in modo nativo.Beginning with SQL Server vNextSQL Server vNext CTP 1.1, the JSON functions are supported in natively compiled modules.
  • Funzioni di errore: ERROR_LINE, ERROR_MESSAGE, ERROR_NUMBER, ERROR_PROCEDURE, ERROR_SEVERITY e ERROR_STATEError functions: ERROR_LINE, ERROR_MESSAGE, ERROR_NUMBER, ERROR_PROCEDURE, ERROR_SEVERITY, and ERROR_STATE

  • Funzioni di sistema: @@rowcount. System Functions: @@rowcount. Le istruzioni all'interno di stored procedure compilate in modo nativo aggiornano @@rowcount ed è possibile usare @@rowcount in una stored procedure compilata in modo nativo per determinare il numero di righe interessate dall'ultima istruzione eseguita all'interno della stored procedure.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. Tuttavia, @@rowcount viene reimpostato su 0 all'inizio e alla fine dell'esecuzione di una stored procedure compilata in modo nativo.However, @@rowcount is reset to 0 at the start and at the end of the execution of a natively compiled stored procedure.

  • Funzioni di sicurezza: 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().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().

  • Le esecuzioni dei moduli nativi possono essere annidate.Executions of native modules can be nested.

Controllo Auditing

Il controllo a livello di routine è supportato nelle stored procedure compilate in modo nativo.Procedure level auditing is supported in natively compiled stored procedures.

Per ulteriori informazioni sul controllo, vedere Create a Server Audit and Database Audit Specification.For more information about auditing, see Create a Server Audit and Database Audit Specification.

Hint di tabella e per la query Table and Query Hints

Sono supportati gli elementi seguenti:The following are supported:

Limitazioni relative all'ordinamento Limitations on Sorting

È possibile ordinare più di 8.000 righe in una query che usa TOP (Transact-SQL) e una clausola ORDER BY Clause (Transact-SQL).You can sort greater than 8,000 rows in a query that uses TOP (Transact-SQL) and an ORDER BY Clause (Transact-SQL). Tuttavia, senza la clausola ORDER BY (Transact-SQL), TOP (Transact-SQL) può ordinare fino a 8.000 righe, meno se sono presenti join.However, without ORDER BY Clause (Transact-SQL), TOP (Transact-SQL) can sort up to 8,000 rows (fewer rows if there are joins).

Se la query usa sia l'operatore TOP (Transact-SQL) che una clausola ORDER BY (Transact-SQL), è possibile specificare fino a 8192 righe per l'operatore TOP.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. Se si specificano più di 8192 righe, viene visualizzato il messaggio di errore: Messaggio 41398, livello 16, stato 1, procedura <nomeProcedura>, riga <. L'operatore TOP può restituire un massimo di 8192 righe. Il numero richiesto è <numero>.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.

Se non si dispone di una clausola TOP, è possibile ordinare qualsiasi numero di righe con ORDER BY.If you do not have a TOP clause, you can sort any number of rows with ORDER BY.

Se non si utilizza una clausola ORDER BY, è possibile utilizzare qualsiasi valore intero con l'operatore TOP.If you do not use an ORDER BY clause, you can use any integer value with the TOP operator.

Esempio con TOP N = 8192: compilaExample 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  

Esempio con TOP N > 8192: non riesce a compilare.Example 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  

Il limite di 8192 righe si applica solo a TOP N``N dove è una costante, come negli esempi precedenti.The 8192 row limitation only applies to TOP N where N is a constant, as in the preceding examples. Se è necessario un valore N maggiore di 8192 è possibile assegnare il valore a una variabile e utilizzare tale variabile con TOP.If you need N greater than 8192 you can assign the value to a variable and use that variable with TOP.

Esempio di utilizzo di una variabile: compilaExample 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  

Limitazioni per le righe restituite. In due casi è possibile che il numero di righe che possono essere restituite dall'operatore TOP venga ridotto: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:

  • Utilizzando JOIN nella query.Using JOINs in the query. L'influenza di JOIN sulla limitazione dipende dal piano di query.The influence of JOINs on the limitation depends on the query plan.

  • Utilizzando funzioni di aggregazione o riferimenti a funzioni di aggregazione nella clausola ORDER BY.Using aggregate functions or references to aggregate functions in the ORDER BY clause.

    La formula per calcolare un valore N massimo supportato nel caso peggiore in TOP N è: 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 ).

Vedere ancheSee Also

Stored procedure compilate in modo nativo Natively Compiled Stored Procedures
Problemi di migrazione relativi alle stored procedure compilate in modo nativoMigration Issues for Natively Compiled Stored Procedures