Creazione di stored procedure compilate in modo nativoCreating Natively Compiled Stored Procedures

In questo argomento si applica a: SìSQL ServerSìDatabase SQL di AzurenonAzure SQL Data Warehouse non Parallel Data WarehouseTHIS TOPIC APPLIES TO: yesSQL ServeryesAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse

Le stored procedure compilate in modo nativo non implementano la programmabilità completa di Transact-SQLTransact-SQL e la superficie di attacco delle query.Natively compiled stored procedures do not implement the full Transact-SQLTransact-SQL programmability and query surface area. Alcuni costrutti Transact-SQLTransact-SQL non possono essere utilizzati all'interno delle stored procedure compilate in modo nativo.There are certain Transact-SQLTransact-SQL constructs that cannot be used inside natively compiled stored procedures. Per altre informazioni, vedere Funzionalità supportate per i moduli T-SQL compilati in modo nativo.For more information, see Supported Features for Natively Compiled T-SQL Modules.

Esistono, tuttavia, alcune funzionalità di Transact-SQLTransact-SQL che sono supportate solo per le stored procedure compilate in modo nativo:There are, however, several Transact-SQLTransact-SQL features that are only supported for natively compiled stored procedures:

  • Blocchi atomici.Atomic blocks. Per altre informazioni, vedere Atomic Blocks.For more information, see Atomic Blocks.

  • Vincoli NOT NULL su parametri e variabili.NOT NULL constraints on parameters and variables. Non è possibile assegnare valori NULL ai parametri o alle variabili dichiarati come NOT NULL.You cannot assign NULL values to parameters or variables declared as NOT NULL. Per altre informazioni, vedere DECLARE @local_variable (Transact-SQL).For more information, see DECLARE @local_variable (Transact-SQL).

    • CREATE PROCEDURE dbo.myproc (@myVarchar varchar(32) not null) ...CREATE PROCEDURE dbo.myproc (@myVarchar varchar(32) not null) ...

    • DECLARE @myVarchar varchar(32) not null = "Hello"; -- (deve essere inizializzato su un valore.)DECLARE @myVarchar varchar(32) not null = "Hello"; -- (Must initialize to a value.)

    • SET @myVarchar = null; -- (viene compilato ma non riesce in fase di esecuzione).SET @myVarchar = null; -- (Compiles, but fails during run time.)

  • Associazione allo schema delle stored procedure compilate in modo nativo.Schema binding of natively compiled stored procedures.

    Le stored procedure compilate in modo nativo vengono create usando CREATE PROCEDURE (Transact-SQL).Natively compiled stored procedures are created using 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.The following example shows a memory-optimized table and a natively compiled stored procedure used for inserting rows into the table.

create table dbo.Ord  
(OrdNo integer not null primary key nonclustered,   
 OrdDate datetime not null,   
 CustCode nvarchar(5) not null)   
 with (memory_optimized=on)  
go  

create procedure dbo.OrderInsert(@OrdNo integer, @CustCode nvarchar(5))  
with native_compilation, schemabinding  
as   
begin atomic with  
(transaction isolation level = snapshot,  
language = N'English')  

  declare @OrdDate datetime = getdate();  
  insert into dbo.Ord (OrdNo, CustCode, OrdDate) values (@OrdNo, @CustCode, @OrdDate);  
end  
go  

Nell'esempio di codice NATIVE_COMPILATION indica che questa stored procedure Transact-SQLTransact-SQL è una stored procedure compilata in modo nativo.In the code sample, NATIVE_COMPILATION indicates that this Transact-SQLTransact-SQL stored procedure is a natively compiled stored procedure. Sono necessarie le opzioni seguenti:The following options are required:

OpzioneOption DescrizioneDescription
SCHEMABINDINGSCHEMABINDING Una stored procedure compilata in modo nativo deve essere associata allo schema degli oggetti a cui fa riferimento.A natively compiled stored procedure must be bound to the schema of the objects it references. Ciò significa che le tabelle a cui fa riferimento la procedura non possono essere eliminate.This means that tables referenced by the procedure cannot be dropped. 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...).Tables referenced in the procedure must include their schema name, and wildcards (*) are not allowed in queries (meaning no SELECT * from...). SCHEMABINDING è supportato unicamente per le stored procedure compilate in modo nativo in questa versione di SQL ServerSQL Server.SCHEMABINDING is only supported for natively compiled stored procedures in this version of SQL ServerSQL Server.
BEGIN ATOMICBEGIN ATOMIC Il corpo di una stored procedure compilata in modo nativo deve essere costituito esattamente da un blocco atomico.The natively compiled stored procedure body must consist of exactly one atomic block. I blocchi atomici garantiscono l'esecuzione atomica della stored procedure.Atomic blocks guarantee atomic execution of the 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.If the procedure is invoked outside the context of an active transaction, it will start a new transaction, which commits at the end of the atomic block. I blocchi atomici nelle stored procedure compilate in modo nativo presentano due opzioni obbligatorie:Atomic blocks in natively compiled stored procedures have two required options:

TRANSACTION ISOLATION LEVEL.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.See Transaction Isolation Levels for Memory-Optimized Tables for supported isolation levels.

LANGUAGE.LANGUAGE. Il linguaggio della stored procedure deve essere impostato su uno dei linguaggi o alias disponibili.The language for the stored procedure must be set to one of the available languages or language aliases.

Vedere ancheSee Also

Stored procedure compilate in modo nativoNatively Compiled Stored Procedures