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 in modo nativo non implementano la programmabilità completa di Transact-SQL e la superficie di attacco delle 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 allo schema delle stored procedure compilate in modo nativo.

Le stored procedure compilate in modo nativo vengono create usando 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 viene fatto riferimento nella procedura devono includere il nome dello schema e i caratteri jolly (*) non sono consentiti nelle query (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 stored procedure viene richiamata all'esterno del contesto di una transazione attiva, verrà avviata una nuova transazione il cui commit avverrà 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

Stored procedure compilate in modo nativo