Creación y acceso a tablas de TempDB desde procedimientos almacenados

Se aplica a:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

No es posible crear ni obtener acceso a tablas de TempDB desde procedimientos almacenados compilados de forma nativa. En su lugar, use tablas optimizadas para memoria con DURABILITY=SCHEMA_ONLY, o bien use tipos de tabla y variables de tabla.

Para obtener más información sobre la optimización de memoria de la tabla temporal y escenarios de variable de tabla, vea lo siguiente: Tabla temporal y variable de tabla más rápidas con optimización para memoria.

En el ejemplo siguiente se muestra cómo se puede reemplazar el uso de una tabla temporal con tres columnas (ID, ProductID, Quantity) mediante una variable de tabla @OrderQuantityByProduct de tipo 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  

Consulte también

Problemas de migración para los procedimientos almacenados compilados de forma nativa
Construcciones de Transact-SQL no admitidas en In-Memory OLTP.