Recursos com suporte para módulos T-SQL compilados nativamenteSupported Features for Natively Compiled T-SQL Modules

APLICA-SE A: simSQL Server simBanco de Dados SQL do Azure SQL nãoAzure Synapse Analytics (SQL DW) nãoData Warehouse Paralelo APPLIES TO: yesSQL Server yesAzure SQL Database noAzure Synapse Analytics (SQL DW) noParallel Data Warehouse

Este tópico contém uma lista da área da superfície do T-SQL e os recursos com suporte no corpo de módulos T-SQL compilados nativamente, como procedimentos armazenados (CREATE PROCEDURE (Transact-SQL)), gatilhos, funções escalares definidas pelo usuário e funções embutidas com valor de tabela.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.

Para ver os recursos com suporte na definição de módulos nativos, consulte DDL com suporte para módulos nativamente compilados do T-SQL.For supported features around the definition of native modules, see Supported DDL for Natively Compiled T-SQL modules.

Para obter informações completas sobre construções sem suporte e sobre como resolver problemas de alguns recursos sem suporte em módulos compilados nativamente, consulte Migration Issues for Natively Compiled Stored Procedures.For complete information about unsupported constructs, and for information about how to work around some of the unsupported features in natively compiled modules, see Migration Issues for Natively Compiled Stored Procedures. Para mais informações sobre os recursos sem suporte, veja Constructos do Transact-SQL sem suporte no OLTP in-memory.For more information about unsupported features, see Transact-SQL Constructs Not Supported by In-Memory OLTP.

Área da superfície da consulta em módulos nativosQuery Surface Area in Native Modules

Há suporte para as seguintes construções de consulta:The following query constructs are supported:

Expressão CASE: CASE pode ser usado em qualquer instrução ou cláusula que permita uma expressão válida.CASE expression: CASE can be used in any statement or clause that allows a valid expression.

  • Aplica-se a: SQL Server 2017 (14.x)SQL Server 2017 (14.x).Applies to: SQL Server 2017 (14.x)SQL Server 2017 (14.x).
    A partir do SQL Server 2017 (14.x)SQL Server 2017 (14.x), agora há suporte para instruções CASE para módulos T-SQL compilados nativamente.Beginning with SQL Server 2017 (14.x)SQL Server 2017 (14.x), CASE statements are now supported for natively compiled T-SQL modules.

Cláusula SELECT:SELECT clause:

  • Aliases de nome e colunas (usando a sintaxe = ou então AS).Columns and name aliases (using either AS or = syntax).

  • Subconsultas escalaresScalar subqueries

    • Aplica-se a: SQL Server 2016 (13.x)SQL Server 2016 (13.x).Applies to: SQL Server 2016 (13.x)SQL Server 2016 (13.x). A partir do SQL Server 2016 (13.x)SQL Server 2016 (13.x), agora há suporte para subconsultas escalares em módulos compilados nativamente.Beginning with SQL Server 2016 (13.x)SQL Server 2016 (13.x), scalar subqueries are now supported in natively compiled modules.
  • INÍCIO*TOP*

  • SELECT DISTINCTSELECT DISTINCT

    • Aplica-se a: SQL Server 2016 (13.x)SQL Server 2016 (13.x).Applies to: SQL Server 2016 (13.x)SQL Server 2016 (13.x). A partir do SQL Server 2016 (13.x)SQL Server 2016 (13.x), há suporte para o operador DISTINCT em módulos compilados nativamente.Beginning with SQL Server 2016 (13.x)SQL Server 2016 (13.x), the DISTINCT operator is supported in natively compiled modules.

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

    • Aplica-se a: SQL Server 2016 (13.x)SQL Server 2016 (13.x).Applies to: SQL Server 2016 (13.x)SQL Server 2016 (13.x). A partir do SQL Server 2016 (13.x)SQL Server 2016 (13.x), agora há suporte para os operadores UNION e UNION ALL em módulos compilados nativamente.Beginning with SQL Server 2016 (13.x)SQL Server 2016 (13.x), UNION and UNION ALL operators are now supported in natively compiled modules.
  • Atribuições de variávelVariable assignments

Cláusula FROM:FROM clause:

  • FROM <tabela com otimização de memória ou variável de tabela>FROM <memory optimized table or table variable>

  • FROM <TVF embutida compilada nativamente>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.

    • Aplica-se a: SQL Server 2016 (13.x)SQL Server 2016 (13.x).Applies to: SQL Server 2016 (13.x)SQL Server 2016 (13.x). A partir do SQL Server 2016 (13.x)SQL Server 2016 (13.x), agora há suporte para JOINS em módulos compilados nativamente.Beginning with SQL Server 2016 (13.x)SQL Server 2016 (13.x), JOINS are now supported in natively compiled modules.
  • Subconsultas [AS] table_alias.Subqueries [AS] table_alias. Para obter mais informações, consulte FROM (Transact-SQL).For more information, see FROM (Transact-SQL).

    • Aplica-se a: SQL Server 2016 (13.x)SQL Server 2016 (13.x).Applies to: SQL Server 2016 (13.x)SQL Server 2016 (13.x). A partir do SQL Server 2016 (13.x)SQL Server 2016 (13.x), agora há suporte para subconsultas em módulos compilados nativamente.Beginning with SQL Server 2016 (13.x)SQL Server 2016 (13.x), Subqueries are now supported in natively compiled modules.

Cláusula WHERE:WHERE clause:

  • Predicado de filtro IS [NOT] NULLFilter predicate IS [NOT] NULL

  • AND, BETWEENAND, BETWEEN

  • OR, NOT, IN, EXISTSOR, NOT, IN, EXISTS

    • Aplica-se a: SQL Server 2016 (13.x)SQL Server 2016 (13.x).Applies to: SQL Server 2016 (13.x)SQL Server 2016 (13.x). A partir do SQL Server 2016 (13.x)SQL Server 2016 (13.x), agora há suporte para operadores OR/NOT/IN/EXISTS em módulos compilados nativamente.Beginning with SQL Server 2016 (13.x)SQL Server 2016 (13.x), OR/NOT/IN/EXISTS operators are now supported in natively compiled modules.

CláusulaGROUP BY :GROUP BY clause:

  • Funções de agregação AVG, COUNT, COUNT_BIG, MIN, MAX e SUM.Aggregate functions AVG, COUNT, COUNT_BIG, MIN, MAX, and SUM.

  • MIN e MAX não têm suporte para os tipos nvarchar, char, varchar, varchar, varbinary e binary.MIN and MAX are not supported for types nvarchar, char, varchar, varchar, varbinary, and binary.

CláusulaORDER BY :ORDER BY clause:

  • Não há suporte para DISTINCT na cláusula ORDER BY .There is no support for DISTINCT in the ORDER BY clause.

  • tem suporte com GROUP BY (Transact-SQL) se uma expressão na lista ORDER BY for exibida literalmente na lista GROUP BY.Is supported with GROUP BY (Transact-SQL) if an expression in the ORDER BY list appears verbatim in the GROUP BY list.

    • Por exemplo, GROUP BY + b ORDER BY a + b tem suporte, mas GROUP BY a, b ORDER BY a + b, não.For example, GROUP BY a + b ORDER BY a + b is supported, but GROUP BY a, b ORDER BY a + b is not.

Cláusula HAVING:HAVING clause:

  • sujeito às mesmas limitações de expressão que a cláusula WHERE.Is subject to the same expression limitations as the WHERE clause.

ORDER BY e TOP têm suporte em módulos compilados nativamente, com algumas restriçõesORDER BY and TOP are supported in natively compiled modules, with some restrictions

  • Não há suporte para WITH TIES ou PERCENT na cláusula TOP .There is no support for WITH TIES or PERCENT in the TOP clause.

  • Não há suporte para DISTINCT na cláusula ORDER BY .There is no support for DISTINCT in the ORDER BY clause.

  • TOP combinado com ORDER BY não dá suporte a mais de 8.192 ao usar uma constante na cláusula TOP .TOP combined with ORDER BY does not support more than 8,192 when using a constant in the TOP clause.

    • Esse limite poderá ser diminuído caso a consulta contenha junções ou funções de agregação.This limit may be lowered in case the query contains joins or aggregate functions. (Por exemplo, com uma junção (duas tabelas), o limite é 4.096 linhas.(For example, with one join (two tables), the limit is 4,096 rows. Com duas junções (três tabelas), o limite é 2.730 linhas.)With two joins (three tables), the limit is 2,730 rows.)
    • Você pode obter resultados maiores que 8.192 armazenando o número de linhas em uma variável: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 ...

No entanto, uma constante na cláusula TOP resulta em um desempenho melhor comparado a usar uma variável.However, a constant in the TOP clause results in better performance compared to using a variable.

Essas restrições em Transact-SQLTransact-SQL compilado nativamente não se aplica ao acesso Transact-SQLTransact-SQL interpretado em tabelas com otimização de memória.These restrictions on natively compiled Transact-SQLTransact-SQL do not apply to interpreted Transact-SQLTransact-SQL access on memory-optimized tables.

Modificação de dadosData Modification

Há suporte para as instruções DML a seguir.The following DML statements are supported.

  • INSERT VALUES (uma linha por instrução) e INSERT ... SELECTINSERT VALUES (one row per statement) and INSERT ... SELECT

  • UPDATEUPDATE

  • Delete (excluir)DELETE

  • WHERE tem suporte com instruções UPDATE e DELETE.WHERE is supported with UPDATE and DELETE statements.

Linguagem de controle de fluxoControl-of-flow language

Há suporte para as construções de linguagem de controle de fluxo a seguir.The following control-of-flow language constructs are supported.

Operadores com suporteSupported Operators

Há suporte para os operadores que se seguem.The following operators are supported.

  • Operadores de comparação (Transact-SQL) (por exemplo, >, <, >= e <=)Comparison Operators (Transact-SQL) (for example, >, <, >=, and <=)

  • Operadores unários (+, -).Unary operators (+, -).

  • Operadores binários (*, /, +, -, % (módulo)).Binary operators (*, /, +, -, % (modulo)).

           The plus operator (+) is supported on both numbers and strings.  
    
  • Operadores lógicos (AND, OR, NOT).Logical operators (AND, OR, NOT).

  • Operadores bit a bit ~, &, |, e ^Bitwise operators ~, &, |, and ^

  • operador APPLYAPPLY operator

    • Aplica-se a: SQL Server 2017 (14.x)SQL Server 2017 (14.x).Applies to: SQL Server 2017 (14.x)SQL Server 2017 (14.x).
      A partir do SQL Server 2017 (14.x)SQL Server 2017 (14.x), há suporte para o operador APPLY em módulos compilados nativamente.Beginning with SQL Server 2017 (14.x)SQL Server 2017 (14.x), the APPLY operator is supported in natively compiled modules.

Funções internas em módulos compilados nativamenteBuilt-in Functions in Natively Compiled Modules

As funções a seguir têm suporte em restrições nas tabelas com otimização de memória e em módulos T-SQL compilados nativamente.The following functions are supported in constraints on memory-optimized tables and in natively compiled T-SQL modules.

  • Todas as Funções matemáticas (Transact-SQL)All Mathematical Functions (Transact-SQL)

  • Funções de 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.

  • Funções de cadeia de caracteres: LEN, LTRIM, RTRIM e SUBSTRING.String functions: LEN, LTRIM, RTRIM, and SUBSTRING.

    • Aplica-se a: SQL Server 2017 (14.x)SQL Server 2017 (14.x).Applies to: SQL Server 2017 (14.x)SQL Server 2017 (14.x).
      A partir do SQL Server 2017 (14.x)SQL Server 2017 (14.x), também há suporte para as seguintes funções internas: TRIM, TRANSLATE e CONCAT_WS.Beginning with SQL Server 2017 (14.x)SQL Server 2017 (14.x), the following built-in functions are also supported: TRIM, TRANSLATE, and CONCAT_WS.
  • Funções de identidade: SCOPE_IDENTITYIdentity functions: SCOPE_IDENTITY

  • Funções NULL: ISNULLNULL functions: ISNULL

  • Funções Uniqueidentifier: NEWID e NEWSEQUENTIALIDUniqueidentifier functions: NEWID and NEWSEQUENTIALID

  • Funções JSONJSON functions

    • Aplica-se a: SQL Server 2017 (14.x)SQL Server 2017 (14.x).Applies to: SQL Server 2017 (14.x)SQL Server 2017 (14.x).
      A partir do SQL Server 2017 (14.x)SQL Server 2017 (14.x), há suporte para as funções JSON em módulos compilados nativamente.Beginning with SQL Server 2017 (14.x)SQL Server 2017 (14.x), the JSON functions are supported in natively compiled modules.
  • Funções de erro: 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

  • Funções do sistema: @@rowcount.System Functions: @@rowcount. As instruções dentro de procedimentos armazenados compilados nativamente atualizam @@rowcount e você pode usar @@rowcount em um procedimento armazenado compilado nativamente para determinar o número de linhas afetadas pela última instrução executada nesse procedimento armazenado compilado nativamente.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. No entanto, @@rowcount é redefinido como 0 no início e no final da execução de um procedimento armazenado compilado nativamente.However, @@rowcount is reset to 0 at the start and at the end of the execution of a natively compiled stored procedure.

  • Funções de segurança: IS_MEMBER({'grupo' | 'função'}), IS_ROLEMEMBER ('função' [, 'entidade_do_banco_de_dados']), IS_SRVROLEMEMBER ('função' [, 'logon']), ORIGINAL_LOGIN(), SESSION_USER, CURRENT_USER, SUSER_ID(['logon']), SUSER_SID(['logon'] [, Param2]), SUSER_SNAME([sid_de_usuário_do_servidor]), SYSTEM_USER, SUSER_NAME, USER, USER_ID(['usuário']), 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().

  • Execuções de módulos nativos podem ser aninhadas.Executions of native modules can be nested.

AuditoriaAuditing

A auditoria no nível de procedimento tem suporte em procedimentos armazenados compilados nativamente.Procedure level auditing is supported in natively compiled stored procedures.

Para obter mais informações sobre a auditoria, consulte Create a Server Audit and Database Audit Specification.For more information about auditing, see Create a Server Audit and Database Audit Specification.

Dicas de tabela e de consultaTable and Query Hints

Há suporte para o seguinte:The following are supported:

Para obter mais informações, veja Dicas de consulta (Transact-SQL).For more information, see Query Hints (Transact-SQL).

Limitações na classificaçãoLimitations on Sorting

Você pode classificar maior que 8.000 linhas em uma consulta que usa TOP (Transact-SQL) e uma Cláusula ORDER BY (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). No entanto, sem a Cláusula ORDER BY (Transact-SQL), TOP (Transact-SQL) pode classificar até 8.000 linhas (menos linhas se houver junções).However, without ORDER BY Clause (Transact-SQL), TOP (Transact-SQL) can sort up to 8,000 rows (fewer rows if there are joins).

Se sua consulta usar o operador TOP (Transact-SQL) e uma Cláusula ORDER BY (Transact-SQL), você pode especificar até 8192 linhas para o operador 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 você especificar mais de 8192 linhas, receberá a mensagem de erro: Msg 41398, Nível 16, Estado 1, Procedimento <procedureName> , Linha <lineNumber> O operador TOP pode retornar no máximo 8192 linhas; <number> foi solicitado.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 você não tiver uma cláusula TOP, poderá classificar qualquer número de linhas com ORDER BY.If you do not have a TOP clause, you can sort any number of rows with ORDER BY.

Se você não usar uma cláusula ORDER BY, poderá usar qualquer valor inteiro com o operador TOP.If you do not use an ORDER BY clause, you can use any integer value with the TOP operator.

Exemplo com 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  

Exemplo com TOP N > 8192: não compila.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  

A limitação de 8192 linhas só se aplica a TOP N onde N é uma constante, como nos exemplos anteriores.The 8192 row limitation only applies to TOP N where N is a constant, as in the preceding examples. Se você precisar de N maior que 8192, poderá atribuir o valor a uma variável e usar essa variável com TOP.If you need N greater than 8192 you can assign the value to a variable and use that variable with TOP.

Exemplo que usa uma variável: 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  

Limitações nas linhas retornadas: Há dois casos em que isso pode, potencialmente, reduzir o número de linhas a serem retornadas pelo operador TOP: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:

  • Uso de JOINs na consulta.Using JOINs in the query. A influência de JOINs na limitação depende do plano de consulta.The influence of JOINs on the limitation depends on the query plan.

  • Uso de funções de agregação ou de referências a funções de agregação na cláusula ORDER BY.Using aggregate functions or references to aggregate functions in the ORDER BY clause.

A fórmula para calcular o pior caso de N com suporte em 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 ).

Consulte TambémSee Also

Procedimentos armazenados compilados nativamente Natively Compiled Stored Procedures
Problemas de migração para procedimentos armazenados compilados nativamenteMigration Issues for Natively Compiled Stored Procedures