Partage via


Créer des tables et y accéder dans TempDB à partir de procédures stockées

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

La création et l’accès aux tables dans TempDB à partir de procédures stockées compilées en mode natif ne sont pas pris en charge. Au lieu de cela, utilisez des tables optimisées en mémoire avec DURABILITY=SCHEMA_ONLY ou utilisez des types de table et des variables de table.

Pour plus d’informations sur l’optimisation de la mémoire de la table temporaire et sur les scénarios de variables de table, consultez : Table temporaire et variable de table plus rapides à l’aide de l’optimisation de la mémoire.

L’exemple suivant montre comment l’utilisation d’une table temporaire à trois colonnes (ID, ProductID, Quantity) peut être remplacée par l’utilisation d’une variable de table OrderQuantityByProduct de type dbo.OrderQuantityByProduct :

CREATE TYPE dbo.OrderQuantityByProduct   
  AS TABLE   
   (id INT NOT NULL PRIMARY KEY NONCLUSTERED HASH WITH (BUCKET_COUNT=100000),   
    ProductID INT NOT NULL,   
    Quantity INT NOT NULL) WITH (MEMORY_OPTIMIZED=ON)  
GO  
CREATE PROCEDURE dbo.usp_OrderQuantityByProduct   
WITH NATIVE_COMPILATION, SCHEMABINDING, EXECUTE AS OWNER  
AS BEGIN ATOMIC WITH   
(  
    TRANSACTION ISOLATION LEVEL = SNAPSHOT,  
    LANGUAGE = N'ENGLISH'  
)  
  -- declare table variables for the list of orders   
  DECLARE @OrderQuantityByProduct dbo.OrderQuantityByProduct  
  
  -- populate input  
  INSERT @OrderQuantityByProduct SELECT ProductID, Quantity FROM dbo.[Order Details]  
  end  

Voir aussi

Problèmes de migration pour les procédures stockées compilées en mode natif
Constructions Transact-SQL non prises en charge par In-Memory OLTP