Skapa och komma åt tabeller i TempDB från lagrade procedurer

gäller för:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

Det går inte att skapa och komma åt tabeller i TempDB från inbyggda kompilerade lagrade procedurer. Använd i stället antingen minnesoptimerade tabeller med DURABILITY=SCHEMA_ONLY eller använd tabelltyper och tabellvariabler.

Mer information om minnesoptimering av scenarier för temporära tabeller och tabellvariabler finns i: Snabbare temporär tabell och tabellvariabel med hjälp av minnesoptimering.

I följande exempel visas hur användningen av en temporär tabell med tre kolumner (ID, ProductID, Quantity) kan ersättas med hjälp av en tabellvariabel @OrderQuantityByProduct av typen 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  

Se även

Migreringsproblem för internt kompilerade lagrade procedurer
Transact-SQL konstruktioner som inte stöds av In-Memory OLTP