Criando procedimentos armazenados compilados nativamente

Aplica-se a:SQL ServerBanco de Dados SQL do AzureInstância Gerenciada de SQL do Azure

Os procedimentos armazenados compilados nativamente não implementam a área completa de programação e superfície de consulta do Transact-SQL. Há determinados constructos Transact-SQL que não podem ser usados dentro de 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ó têm suporte para 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.

Os procedimentos armazenados compilados nativamente são criados usando 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 Transact-SQL é um procedimento armazenado 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 curingas (*) não são permitidos em consultas (ou seja, não SELECT * from...). SCHEMABINDING só tem suporte para 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.

Consulte Também

Procedimentos armazenados compilados nativamente