Partage via


Création de procédures stockées compilées en mode natif

S’applique à : SQL Server base de données Azure SQL Azure SQL Managed Instance

Les procédures stockées compilées nativement n’implémentent pas la programmabilité Transact-SQL complète et la surface de requête. Certaines constructions Transact-SQL ne peuvent pas être utilisées dans des procédures stockées compilées en mode natif. Pour plus d’informations, consultez Fonctionnalités prises en charge pour les modules T-SQL compilés en mode natif.

Les fonctionnalités Transact-SQL suivantes sont uniquement prises en charge pour les procédures stockées compilées en mode natif :

  • Blocs Atomic. Pour plus d’informations, consultez Atomic Blocks.

  • Contraintes NOT NULL sur les paramètres et les variables. Vous ne pouvez pas affecter de valeurs NULL aux paramètres ou aux variables déclarés en tant que NOT NULL. Pour plus d’informations, consultez 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.

  • Liaison de schéma des procédures stockées compilées en mode natif.

Les procédures stockées compilées en mode natif sont créées à l’aide de CREATE PROCEDURE (Transact-SQL). L'exemple suivant illustre une table optimisée en mémoire et une procédure stockée compilée en mode natif utilisée pour insérer des lignes dans la table.

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  

Dans l’exemple de code, NATIVE_COMPILATION indique que cette procédure stockée Transact-SQL est une procédure stockée compilée en mode natif. Les options suivantes sont requises :

Option Description
SCHEMABINDING Les procédures stockées compilées en mode natif doivent être liées au schéma des objets référencés. Autrement dit, les tables référencées par la procédure ne peuvent pas être supprimées. Les tables référencées dans la procédure doivent inclure le nom du schéma, et les caractères génériques (*) ne sont pas autorisés dans les requêtes (pas de SELECT * from...). SCHEMABINDING est uniquement prise en charge pour les procédures stockées compilées en mode natif dans cette version de SQL Server.
BEGIN ATOMIC Le corps d'une procédure stockée compilée en mode natif doit être un bloc Atomic. Les blocs Atomic garantissent l'exécution atomique de la procédure stockée. Si la procédure est appelée en dehors du contexte d'une transaction active, elle démarre une nouvelle transaction, qui valide la transaction à la fin du bloc Atomic. Deux options sont obligatoires pour les blocs Atomic dans les procédures stockées compilées en mode natif :

TRANSACTION ISOLATION LEVEL. Consultez Niveaux d’isolement des transactions pour les tables mémoire optimisées pour connaître les niveaux d’isolement pris en charge.

LANGUAGE. Le langage de la procédure stockée doit être défini sur l'un des langages ou des alias de langage disponibles.

Voir aussi

Procédures stockées compilées en mode natif