Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Este tópico contém uma lista de recursos com suporte para procedimentos armazenados compilados nativamente (CREATE PROCEDURE (Transact-SQL)):
Programação em procedimentos armazenados compilados nativamente
Funções internas em procedimentos armazenados compilados nativamente
Superfície de Consulta em Procedimentos Armazenados Compilados Nativamente
Para obter informações sobre tipos de dados com suporte em procedimentos armazenados compilados nativamente, consulte Tipos de Dados Com Suporte.
Para obter informações completas sobre construções sem suporte e para obter informações sobre como contornar alguns dos recursos sem suporte em procedimentos armazenados compilados nativamente, consulte Problemas de migração para procedimentos armazenados compilados nativamente. Para obter mais informações sobre recursos sem suporte, consulte Transact-SQL Constructs Not Supported by In-Memory OLTP.
Programação em procedimentos armazenados compilados nativamente
Há suporte para o seguinte:
BEGIN ATOMIC (no nível externo do procedimento armazenado), LANGUAGE, ISOLATION LEVEL, DATEFORMAT e DATEFIRST.
Declarando variáveis como NULL ou NOT NULL. Se uma variável for declarada como NOT NULL, a declaração deverá ter um inicializador. Se uma variável não for declarada como NOT NULL, um inicializador será opcional.
SE e ENQUANTO
INSERIR/ATUALIZAR/EXCLUIR
Não há suporte para subconsultas. Na cláusula WHERE ou HAVING, HÁ suporte para AND e BETWEEN; NÃO há suporte para OR, NOT e IN.
Tipos de tabela com otimização de memória e variáveis de tabela.
RETORNAR
SELECIONAR
AJUSTAR
TRY/CATCH/THROW
Para otimizar o desempenho, use um único bloco TRY/CATCH para um procedimento armazenado totalmente compilado nativamente.
Operadores com suporte
Há suporte para os operadores a seguir.
Operadores de comparação (Transact-SQL) (por exemplo, >, , <>=e <=) têm suporte em condicionais (IF, WHILE).
Operadores unários (+, -).
Operadores binários (*, /, +, -, % (modulo)).
O operador de adição (+) tem suporte em números e cadeias de caracteres.
Operadores lógicos (AND, OR, NOT). As instruções OR e NOT são suportadas nas declarações IF e WHILE, mas não nas cláusulas WHERE ou HAVING.
Operadores bit a bit ~, &, | e ^
Funções internas em procedimentos armazenados compilados nativamente
As funções a seguir têm suporte em restrições padrão em tabelas com otimização de memória e em procedimentos armazenados compilados nativamente.
Funções matemáticas: ACOS, ASIN, ATAN, ATN2, COS, COT, DEGREES, EXP, LOG, LOG10, PI, POWER, RADIANS, RAND, SIN, SQRT, SQUARE e TAN
Funções de data: CURRENT_TIMESTAMP, DATEADD, DATEDIFF, DATEFROMPARTS, DATEPART, DATETIME2FROMPARTS, DATETIMEFROMPARTS, DAY, EOMONTH, GETDATE, GETUTCDATE, MONTH, SMALLDATETIMEFROMPARTS, SYSDATETIME, SYSUTCDATETIME e YEAR.
Funções de cadeia de caracteres: LEN, LTRIM, RTRIM e SUBSTRING
Função de identidade: SCOPE_IDENTITY
Funções de NULL: ISNULL
Funções Uniqueidentifier: NEWID e NEWSEQUENTIALID
Funções de erro: ERROR_LINE, ERROR_MESSAGE, ERROR_NUMBER, ERROR_PROCEDURE, ERROR_SEVERITY e ERROR_STATE
Conversões: CAST e CONVERT. Não há suporte para conversões entre cadeias de caracteres Unicode e não Unicode (n(var)char e (var)char).
Funções do sistema: @@rowcount. 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 dentro desse procedimento armazenado compilado nativamente. No entanto, @@rowcount é redefinido para 0 no início e no final da execução de um procedimento armazenado compilado nativamente.
Consultar a área de superfície em procedimentos armazenados compilados de forma nativa
Há suporte para o seguinte:
ENTRE
Aliases de nomes de coluna (usando a sintaxe AS ou =).
CROSS JOIN e INNER JOIN, compatíveis apenas com consultas SELECT.
As expressões têm suporte na lista SELECT e na cláusula WHERE (Transact-SQL) se usarem um operador com suporte. Consulte operadores com suporte para obter a lista de operadores com suporte no momento.
Predicado de filtro IS [NOT] NULL
Tabela com otimização de memória FROM <>
O GROUP BY (Transact-SQL) tem suporte, juntamente com as funções de agregação AVG, COUNT, COUNT_BIG, MIN, MAX e SUM. NÃO há suporte para MIN e MAX para os tipos nvarchar, char, varchar, varchar, varbinary e binary. A Cláusula ORDER BY (Transact-SQL) terá suporte com GROUP BY (Transact-SQL) se uma expressão na lista ORDER BY aparecer verbatim na lista GROUP BY. Por exemplo, GROUP BY a + b ORDER BY a + b é suportado, mas GROUP BY a, b ORDER BY a + b não é suportado.
Cláusula HAVING, sujeita às mesmas limitações de expressão que a cláusula WHERE.
INSERT VALUES (uma linha por instrução) e INSERT SELECT
ORDER BY 1
Predicados que não fazem referência a uma coluna.
SELECT, UPDATE e DELETE
TOP 1
Atribuição de variável na lista SELECT.
ONDE... E
1 As cláusulas ORDER BY e TOP são suportadas em procedimentos armazenados compilados nativamente, com algumas restrições.
Não há suporte para
DISTINCTna cláusulaSELECTou na cláusulaORDER BY.Não há suporte para
WITH TIESouPERCENTnaTOPcláusula.TOPcombinado comORDER BYnão dá suporte a mais de 8.192 ao usar uma constante naTOPcláusula. Esse limite pode ser reduzido caso a consulta contenha junções ou funções de agregação. (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.)Você pode obter resultados maiores que 8.192 armazenando o número de linhas em uma variável:
DECLARE @v INT = 9000 SELECT TOP (@v) ... FROM ... ORDER BY ...
No entanto, uma constante na TOP cláusula resulta em um melhor desempenho em comparação com o uso de uma variável.
Essas restrições não se aplicam ao acesso Transact-SQL interpretado em tabelas com otimização de memória.
Auditoria
A auditoria no nível do procedimento tem suporte em procedimentos armazenados compilados nativamente. Não há suporte para auditoria no nível da instrução.
Para obter mais informações sobre auditoria, consulte Criar uma auditoria de servidor e uma especificação de auditoria de banco de dados.
Sugestões de tabela, consulta e junção
Há suporte para o seguinte:
Dicas INDEX, FORCESCAN e FORCESEEK, na sintaxe de dicas de tabela ou na Cláusula OPTION (Transact-SQL) da consulta.
ORDEM DE FORÇA
JUNÇÃO DE LOOP INTERNO
OTIMIZAR PARA
Para obter mais informações, veja Dicas (Transact-SQL).
Limitações na classificação
Você pode classificar mais de 8.000 linhas em uma consulta que usa 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 classificar até 8.000 linhas (menos linhas se houver junções).
Se a consulta usar o operador TOP (Transact-SQL) e uma cláusula ORDER BY (Transact-SQL), você poderá especificar até 8.192 linhas para o operador TOP. Se você especificar mais de 8.192 linhas, receberá a mensagem de erro: Msg 41398, Nível 16, Estado 1, Procedure< procedureName>, Line <lineNumber> O operador TOP poderá retornar um máximo de 8192 linhas; <o número> foi solicitado.
Se você não tiver uma cláusula TOP, poderá classificar qualquer número de linhas com ORDER BY.
Se você não usar uma cláusula ORDER BY, poderá 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: Falha ao compilar.
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 linha 8192 só se aplica a TOP N onde N está uma constante, como nos exemplos anteriores. Se você precisar de um valor N maior que 8192, poderá atribuí-lo a uma variável e usar essa variável com TOP.
Exemplo usando uma variável: Compila
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 reduzir potencialmente o número de linhas que podem ser retornadas pelo operador TOP:
Utilizando JOINs na consulta. A influência dos JOINs na limitação depende do plano de consulta.
Usando funções de agregação ou referências a funções de agregação na cláusula ORDER BY.
A fórmula para calcular o pio caso máximo de N com suporte em TOP N é: N = floor ( 65536 / number_of_tables * 8 + total_size+of+aggs ).
Consulte Também
Procedimentos armazenados compilados nativamente
Problemas de migração para procedimentos armazenados compilados nativamente