Creazione di stored procedure compilate in modo nativo

Si applica a:SQL Server, Database SQL di Azure e Istanza gestita di SQL di Azure

Le stored procedure compilate nativamente non implementano l'intera programmabilità di Transact-SQL né l'insieme completo delle funzionalità di query. Alcuni costrutti Transact-SQL non possono essere utilizzati all'interno delle stored procedure compilate in modo nativo. Per altre informazioni, vedere Funzionalità supportate per i moduli T-SQL compilati in modo nativo.

Le funzionalità seguenti di Transact-SQL sono supportate unicamente per le stored procedure compilate in modo nativo:

  • Blocchi atomici. Per altre informazioni, vedere Atomic Blocks.

  • Vincoli NOT NULL su parametri e variabili. Non è possibile assegnare valori NULL ai parametri o alle variabili dichiarati come NOT NULL. Per ulteriori informazioni, vedere 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.

  • Associazione a uno schema delle stored procedure compilate in modo nativo.

Le procedure memorizzate compilate in modalità nativa vengono create tramite CREATE PROCEDURE (Transact-SQL). Nell'esempio seguente vengono illustrate una tabella ottimizzata per la memoria e una stored procedure compilata in modo nativo per inserire righe nella tabella.

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  

Nell'esempio di codice NATIVE_COMPILATION indica che questa stored procedure Transact-SQL è una stored procedure compilata in modo nativo. Sono necessarie le opzioni seguenti:

Opzione Descrizione
SCHEMABINDING Una stored procedure compilata in modo nativo deve essere associata allo schema degli oggetti a cui fa riferimento. Ciò significa che le tabelle a cui fa riferimento la procedura non possono essere eliminate. Le tabelle a cui si fa riferimento nella procedura devono includere il nome del relativo schema e i caratteri jolly (*) non sono consentiti nelle query (ossia, nessun SELECT * from...). SCHEMABINDING è supportato unicamente per le stored procedure compilate in modo nativo in questa versione di SQL Server.
BEGIN ATOMIC Il corpo di una stored procedure compilata in modo nativo deve essere costituito esattamente da un blocco atomico. I blocchi atomici garantiscono l'esecuzione atomica della stored procedure. Se la procedura viene richiamata al di fuori del contesto di una transazione attiva, verrà avviata una nuova transazione, che verrà confermata alla fine del blocco atomico. I blocchi atomici nelle stored procedure compilate in modo nativo presentano due opzioni obbligatorie:

TRANSACTION ISOLATION LEVEL. Vedere Transaction Isolation Levels for Memory-Optimized Tables (Livelli di isolamento delle transazioni per tabelle con ottimizzazione per la memoria) per i livelli di isolamento supportati.

LANGUAGE. Il linguaggio della stored procedure deve essere impostato su uno dei linguaggi o alias disponibili.

Vedi anche

Procedure archiviate compilate in modo nativo