Partilhar via


Criando procedimentos armazenados compilados nativamente

Aplica-se a: SQL Server Banco de Dados SQL do Azure Instância Gerenciada de SQL do Azure

Os procedimentos armazenados compilados nativamente não implementam a capacidade de programação completa do Transact-SQL e a área da superfície da consulta. Há determinados constructos do Transact-SQL que não podem ser usados nos procedimentos armazenados compilados nativamente. Para obter mais informações, veja Recursos com suporte para módulos T-SQL compilados de modo nativo.

Os seguintes recursos do Transact-SQL são compatíveis somente com procedimentos armazenados compilados nativamente:

  • Blocos atômicos. Para obter mais informações, veja Blocos atômicos.

  • Restrições de NOT NULL em parâmetros e variáveis. Não é possível atribuir valores NULL a parâmetros ou variáveis declarados como NOT NULL. Para obter mais informações, consulte DECLARE @local_variable (Transact-SQL).

    • CREATE PROCEDURE dbo.myproc (@myVarchar VARCHAR(32) NOT NULL) AS (...)

    • DECLARE @myVarchar VARCHAR(32) NOT NULL = "Hello"; -- Must initialize to a value.

    • SET @myVarchar = NULL; -- Compiles, but fails during run time.

  • Associação de esquema de procedimentos armazenados compilados nativamente.

Procedimentos armazenados compilados nativamente são criados com CREATE PROCEDURE (Transact-SQL). O exemplo a seguir mostra uma tabela com otimização de memória e um procedimento armazenado compilado nativamente usado para inserção de linhas na tabela.

CREATE TABLE [dbo].[T2] (  
  [c1] [int] NOT NULL, 
  [c2] [datetime] NOT NULL,
  [c3] nvarchar(5) NOT NULL, 
  CONSTRAINT [PK_T1] PRIMARY KEY NONCLUSTERED ([c1])  
  ) WITH ( MEMORY_OPTIMIZED = ON , DURABILITY = SCHEMA_AND_DATA )  
GO  
  
CREATE PROCEDURE [dbo].[usp_2] (@c1 int, @c3 nvarchar(5)) 
WITH NATIVE_COMPILATION, SCHEMABINDING  
AS BEGIN ATOMIC WITH  
(  
 TRANSACTION ISOLATION LEVEL = SNAPSHOT, LANGUAGE = N'us_english'  
)  
  DECLARE @c2 datetime = GETDATE();  
  INSERT INTO [dbo].[T2] (c1, c2, c3) values (@c1, @c2, @c3);  
END  
GO  

No exemplo de código, NATIVE_COMPILATION indica que esse procedimento armazenado do Transact-SQL é compilado nativamente. As seguintes opções são necessárias:

Opção Descrição
SCHEMABINDING Um procedimento armazenado compilado nativamente deve ser associado ao esquema dos objetos que ele referencia. Isso significa que as tabelas referenciadas pelo procedimento não podem ser eliminadas. As tabelas referenciadas no procedimento devem incluir o nome do esquema e não são permitidos curingas (*) em consultas (ou seja, sem SELECT * from...). O SCHEMABINDING somente é compatível com procedimentos armazenados compilados nativamente nesta versão do SQL Server.
BEGIN ATOMIC O corpo do procedimento armazenado compilado nativamente deve consistir em exatamente um bloco atômico. Os blocos atômicos garantem a execução atômica do procedimento armazenado. Se o procedimento for chamado fora do contexto de uma transação ativa, ele iniciará uma nova transação, que é confirmada no fim do bloco atômico. Os blocos atômicos nos procedimentos armazenados compilados nativamente têm duas opções necessárias:

TRANSACTION ISOLATION LEVEL. Veja Transaction Isolation Levels for Memory-Optimized Tables (Níveis de isolamento da transação para tabelas com otimização de memória) para obter os níveis de isolamento com suporte.

LANGUAGE. O idioma do procedimento armazenado deve ser definido para um dos idiomas ou alias de idioma disponíveis.

Confira também

Procedimentos armazenados compilados nativamente