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

S’applique à :SQL ServerAzure SQL DatabaseAzure 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 des scénarios de table temporaire et de table, consultez : Table temporaire plus rapide et variable de table à l’aide de l’optimisation de la mémoire.

L’exemple suivant montre comment l’utilisation d’une table temporaire avec trois colonnes (ID, ProductID, Quantity) peut être remplacée à l’aide 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