Erstellen und Zugreifen auf Tabellen in TempDB aus gespeicherten Prozeduren

Gilt für:SQL ServerAzure SQL-DatenbankAzure SQL Managed Instance

Das Erstellen von und Zugreifen auf Tabellen über nativ kompilierte gespeicherte Prozeduren in tempdb wird nicht unterstützt. Verwenden Sie stattdessen entweder speicheroptimierte Tabellen mit DURABILITY=SCHEMA_ONLY, oder verwenden Sie Tabellentypen und Tabellenvariablen.

Weitere Informationen zur Speicheroptimierung von Temp-Tabellen- und Tabellenvariablenszenarien finden Sie unter: Schnellere Temp-Tabelle und Tabellenvariable mithilfe der Speicheroptimierung.

Das folgende Beispiel zeigt, wie die Verwendung einer temporären Tabelle mit drei Spalten (ID, ProductID, Menge) mithilfe einer Tabellenvariablen @OrderQuantityByProduct vom Typ "dbo" ersetzt werden kann. 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  

Weitere Informationen

Migrationsprobleme bei systemintern kompilierten gespeicherten Prozeduren
Von In-Memory OLTP nicht unterstützte Transact-SQL-Konstrukte.