Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Aplica-se a:SQL Server
Banco de Dados SQL do Azure
Instância Gerenciada SQL do Azure
Este tópico contém uma lista da área de abrangência do T-SQL e dos recursos suportados no corpo dos módulos T-SQL compilados nativamente, como procedimentos armazenados (CREATE PROCEDURE (Transact-SQL)), funções escalares definidas pelo utilizador, funções de valor de tabela inline e gatilhos.
Para funcionalidades suportadas em torno da definição de módulos nativos, veja DDL suportado para módulos T-SQL Compilados Nativamente.
Para informações completas sobre construções não suportadas e sobre como contornar algumas das funcionalidades não suportadas em módulos compilados nativamente, consulte Problemas de Migração para Procedimentos Armazenados Compilados Nativamente. Para mais informações sobre funcionalidades não suportadas, consulte Transact-SQL Construções Não Suportadas por In-Memory OLTP.
Área de Superfície de Consulta em Módulos Nativos
São suportados os seguintes construtos de consulta:
Expressão CASE: O CASE pode ser utilizado em qualquer instrução ou cláusula que permita uma expressão válida.
-
Aplica-se a: SQL Server 2017 (14.x).
A partir do SQL Server 2017 (14.x), as instruções CASE passaram a ser suportadas para módulos T-SQL compilados nativamente.
cláusula SELECT:
Colunas e os nomes de pseudónimos (com a sintaxe AS ou =).
Subconsultas escalares
- Aplica-se a: SQL Server 2016 (13.x). A partir do SQL Server 2016 (13.x), subconsultas escalares passaram a ser suportadas em módulos compilados nativamente.
INÍCIO*
SELECT DISTINCT
Aplica-se a: SQL Server 2016 (13.x). A partir do SQL Server 2016 (13.x), o operador DISTINCT é suportado em módulos compilados nativamente.
- Agregados DISTINCT não são suportados.
UNION e UNION ALL
- Aplica-se a: SQL Server 2016 (13.x). A partir do SQL Server 2016 (13.x), os operadores UNION e UNION ALL passam a ser suportados em módulos compilados nativamente.
Atribuições de variáveis
Cláusula FROM:
FROM <tabela otimizada para memória ou variável de tabela>
DE <TVF compilado nativamente em linha>
JUNÇÃO EXTERNA À ESQUERDA, JUNÇÃO EXTERNA À DIREITA, JUNÇÃO CRUZADA e JUNÇÃO INTERNA.
- Aplica-se a: SQL Server 2016 (13.x). A partir do SQL Server 2016 (13.x), os JOINS passaram a ser suportados em módulos compilados nativamente.
Subqueries
[AS] table_alias. Para obter mais informações, consulte FROM (Transact-SQL).- Aplica-se a: SQL Server 2016 (13.x). A partir do SQL Server 2016 (13.x), as subqueries passaram a ser suportadas em módulos compilados nativamente.
cláusula WHERE:
O predicado do filtro É [NÃO] NULO
E, ENTRE
OU, NÃO, EM, EXISTE
- Aplica-se a: SQL Server 2016 (13.x). A partir do SQL Server 2016 (13.x), os operadores OR/NOT/IN/EXISTS passam a ser suportados em módulos compilados nativamente.
GROUP BY cláusula:
Funções agregadas AVG, COUNT, COUNT_BIG, MIN, MAX e SUM.
MIN e MAX não são suportados para os tipos nvarchar, char, varchar, varbinary e binary.
ORDENAR POR cláusula:
Não há suporte para DISTINCT na cláusula ORDER BY .
É suportado com GROUP BY (Transact-SQL) se uma expressão na lista ORDER BY aparecer literalmente na lista GROUP BY.
- Por exemplo, AGRUPAR POR a + b ORDENAR POR a + b é suportado, mas AGRUPAR POR a, b ORDENAR POR a + b não é.
cláusula HAVER:
- Está sujeito às mesmas limitações de expressão que a cláusula WHERE.
ORDER BY e TOP são suportados em módulos compilados nativamente, com algumas restrições
Não há suporte para COM IGUALDADES ou PORCENTAGEM na cláusula TOP.
Não há suporte para DISTINCT na cláusula ORDER BY .
TOP combinado com ORDER BY não suporta mais de 8.192 quando se usa uma constante na cláusula TOP .
- Este limite pode ser reduzido caso a consulta contenha junções ou funções agregadas. (Por exemplo, com uma junção (duas tabelas), o limite é de 4.096 linhas. Com duas junções (três tabelas), o limite é de 2.730 linhas.)
- Pode obter resultados superiores a 8.192 armazenando o número de linhas numa variável:
DECLARE @v INT = 9000;
SELECT TOP (@v) ... FROM ... ORDER BY ...
No entanto, uma constante na cláusula TOP resulta em melhor desempenho comparado com a utilização de uma variável.
Estas restrições a Transact-SQL compiladas nativamente não se aplicam ao acesso Transact-SQL interpretado em tabelas otimizadas para memória.
Modificação de Dados
As seguintes declarações DML são suportadas.
INSERT VALUES (uma linha por declaração) e INSERT ... SELECT
UPDATE
DELETE
WHERE é suportado com instruções UPDATE e DELETE.
Linguagem de controlo do fluxo
São suportados os seguintes construtos de linguagem de controlo do fluxo.
DECLARE @local_variable (Transact-SQL) pode usar todos os Tipos de Dados Suportados para In-Memory OLTP, bem como tipos de tabela otimizados para memória. As variáveis podem ser declaradas como NULL ou NÃO NULAS.
TENTE... CAPTURAR (Transact-SQL)
- Para alcançar um desempenho ótimo, utilize-se um único bloco TRY/CATCH para um módulo T-SQL nativo completo.
INICIAR ATOMIC (no nível externo do procedimento armazenado). Para mais detalhes, veja Blocos Atómicos.
Operadores Suportados
Os seguintes operadores são suportados.
Operadores de Comparação (Transact-SQL) (por exemplo, >, <, >=, e <=)
Operadores unários (+, -).
Operadores binários (*, /, +, -, % (módulo)).
- O operador mais (+) é suportado tanto em números como em cadeias.
Operadores lógicos (AND, OR, NOT).
Operadores bit a bit ~, &, |, e ^
Operador APPLY
-
Aplica-se a: SQL Server 2017 (14.x).
A partir do SQL Server 2017 (14.x), o operador APPLY é suportado em módulos compilados nativamente.
-
Aplica-se a: SQL Server 2017 (14.x).
Funções incorporadas em módulos compilados nativamente
As seguintes funções são suportadas em restrições em tabelas otimizadas para memória e em módulos T-SQL compilados nativamente.
Todas as Funções Matemáticas (Transact-SQL)
Funções de data: CURRENT_TIMESTAMP, DATEADD, DATEDIFF, DATEFROMPARTS, DATEPART, DATETIME2FROMPARTS, DATETIMEFROMPARTS, DAY, EOMONTH, GETDATE, GETUTCDATE, MONTH, SMALLDATETIMEFROMPARTS, SYSDATETIME, SYSUTCDATETIME, YEAR.
Funções de string: LEN, LTRIM, RTRIM e SUBSTRING.
-
Aplica-se a: SQL Server 2017 (14.x).
A partir do SQL Server 2017 (14.x), também são suportadas as seguintes funções integradas: TRIM, TRANSLATE e CONCAT_WS.
-
Aplica-se a: SQL Server 2017 (14.x).
Funções de Identidade: SCOPE_IDENTITY
Funções NULL: ISNULL
Funções de identificador único: NEWID e NEWSEQUENTIALID
Funções JSON
-
Aplica-se a: SQL Server 2017 (14.x).
A partir do SQL Server 2017 (14.x), as funções JSON são suportadas em módulos compilados nativamente.
-
Aplica-se a: SQL Server 2017 (14.x).
Funções de erro: ERROR_LINE, ERROR_MESSAGE, ERROR_NUMBER, ERROR_PROCEDURE, ERROR_SEVERITY e ERROR_STATE
Funções do Sistema: @@rowcount. As instruções dentro de procedimentos armazenados compilados nativamente atualizam @@rowcount e pode usar @@rowcount num procedimento armazenado compilado nativamente para determinar o número de linhas afetadas pela última instrução executada dentro desse procedimento armazenado compilado nativamente. No entanto, @@rowcount é reiniciado para 0 no início e no final da execução de um procedimento armazenado compilado nativamente.
Funções de segurança: IS_MEMBER({'group' | 'função'}), IS_ROLEMEMBER ('função' [, 'database_principal']), IS_SRVROLEMEMBER ('função' [, '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().
As execuções de módulos nativos podem ser aninhadas.
Auditing
A auditoria ao nível de procedimentos é suportada em procedimentos armazenados compilados nativamente.
Para mais informações sobre auditoria, consulte Criar uma Especificação de Auditoria de Servidor e Auditoria de Base de Dados.
Sugestões de Tabela e Consulta
São suportados os seguintes:
Sugestões INDEX, FORCESCAN e FORCESEEK, quer na sintaxe de sugestões da tabela, quer na Cláusula OPTION (Transact-SQL) da consulta. Para obter mais informações, consulte Sugestões para tabelas (Transact-SQL).
ORDEM DE FORÇA
Sugestão LOOP JOIN
OTIMIZAR PARA
Para obter mais informações, consulte Sugestões de Consulta (Transact-SQL).
Limitações na Ordenação
Pode ordenar mais de 8.000 linhas numa consulta que use TOP (Transact-SQL) e uma cláusula ORDER BY (Transact-SQL). No entanto, sem a cláusula ORDER BY (Transact-SQL), TOP (Transact-SQL) pode ordenar até 8.000 linhas (menos linhas se houver joins).
Se a sua consulta usar tanto o operador TOP (Transact-SQL) como uma cláusula ORDER BY (Transact-SQL), pode especificar até 8192 linhas para o operador TOP. Se especificar mais de 8192 linhas, recebe a mensagem de erro: Msg 41398, Nível 16, Estado 1, Procedimento< NomeProcedimento>, Linha < númeroLinha> O operador TOP pode devolver um máximo de 8192 linhas; <número> foi solicitado.
Se não tiver uma cláusula TOP, pode ordenar qualquer número de linhas com ORDER BY.
Se não usar uma cláusula ORDER BY, pode usar qualquer valor inteiro com o operador TOP.
Exemplo com TOP N = 8192: Compila
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.
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 linhas 8192 aplica-se apenas a TOP N onde N é uma constante, como nos exemplos anteriores. Se precisar N de mais do que 8192, pode atribuir o valor a uma variável e usar essa variável com TOP.
Exemplo usando uma variável: 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 devolvidas: Existem dois casos em que isso pode potencialmente reduzir o número de linhas que podem ser devolvidas pelo operador TOP:
Usando JOINs na consulta. A influência dos JOINs na limitação depende do plano de consulta.
Usar funções agregadas ou referências a funções agregadas na cláusula ORDER BY.
A fórmula para calcular um máximo N suportado no pior caso em TOP N é: N = floor ( 65536 / number_of_tables * 8 + total_size+of+aggs ).
Ver também
Procedimentos Armazenados Compilados Nativamente
Problemas de Migração para Procedimentos Armazenados Compilados Nativamente