Erstellen nativ kompilierter gespeicherter Prozeduren

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

Native kompilierte gespeicherte Prozeduren implementieren nicht den vollständigen Transact-SQL-Programmier- und Abfrageoberflächenbereich. Es gibt bestimmte Transact-SQL-Konstrukte, die nicht in systemeigenen kompilierten gespeicherten Prozeduren verwendet werden können. Weitere Informationen finden Sie unter Unterstützte Funktionen für nativ kompilierte T-SQL-Module.

Die folgenden Transact-SQL-Features werden nur für systemeigene kompilierte gespeicherte Prozeduren unterstützt:

  • ATOMIC-Blöcke. Weitere Informationen finden Sie unter ATOMIC-Blöcke.

  • NOT NULL-Einschränkungen für Parameter und Variablen. Sie können als NOT NULL deklarierten Parametern oder Variablen keine NULL-Werte zuweisen. Weitere Informationen finden Sie unter DECLARE @local_variable (Transact-SQL).

    • CREATE PROCEDURE dbo.myproc (@myVarchar VARCHAR(32) NOT NULL) AS (...)

    • DECLARE @myVarchar VARCHAR(32) NOT NULL = "Hello"; -- Must initialize to a value.

    • SET @myVarchar = NULL; -- Compiles, but fails during run time.

  • Schemabindung von systemintern kompilierten gespeicherten Prozeduren.

Nativ kompilierte gespeicherte Prozeduren werden mithilfe von CREATE PROCEDURE (Transact-SQL) erstellt. Das folgende Beispiel zeigt eine speicheroptimierte Tabelle und eine systemintern kompilierte gespeicherte Prozedur, die zum Einfügen von Zeilen in die Tabelle verwendet wird.

CREATE TABLE [dbo].[T2] (  
  [c1] [int] NOT NULL, 
  [c2] [datetime] NOT NULL,
  [c3] nvarchar(5) NOT NULL, 
  CONSTRAINT [PK_T1] PRIMARY KEY NONCLUSTERED ([c1])  
  ) WITH ( MEMORY_OPTIMIZED = ON , DURABILITY = SCHEMA_AND_DATA )  
GO  
  
CREATE PROCEDURE [dbo].[usp_2] (@c1 int, @c3 nvarchar(5)) 
WITH NATIVE_COMPILATION, SCHEMABINDING  
AS BEGIN ATOMIC WITH  
(  
 TRANSACTION ISOLATION LEVEL = SNAPSHOT, LANGUAGE = N'us_english'  
)  
  DECLARE @c2 datetime = GETDATE();  
  INSERT INTO [dbo].[T2] (c1, c2, c3) values (@c1, @c2, @c3);  
END  
GO  

Im Codebeispiel gibt NATIVE_COMPILATION an, dass diese gespeicherte Transact-SQL-Prozedur eine nativ kompilierte gespeicherte Prozedur ist. Die folgenden Optionen sind erforderlich:

Option Beschreibung
SCHEMABINDING Eine systemintern kompilierte gespeicherte Prozedur muss an das Schema der Objekte gebunden werden, auf die sie verweist. Dies bedeutet, dass Tabellen, auf die von der Prozedur verwiesen wird, nicht gelöscht werden können. Tabellen, auf die in der Prozedur verwiesen wird, müssen ihren Schemanamen enthalten, und Platzhalter (*) sind in Abfragen nicht zulässig (d. h. nein SELECT * from...). SCHEMABINDING wird nur für systemeigene kompilierte gespeicherte Prozeduren in dieser Version von SQL Server unterstützt.
BEGIN ATOMIC Der Text einer systemintern kompilierten gespeicherten Prozedur muss genau ein ATOMIC-Block sein. ATOMIC-Blöcke gewährleisten die unteilbare Ausführung der gespeicherten Prozedur. Wenn die Prozedur außerhalb des Kontexts einer aktiven Transaktion aufgerufen wird, wird eine neue Transaktion gestartet, für die am Ende des ATOMIC-Blocks ein Commit ausgeführt wird. ATOMIC-Blöcke in systemintern kompilierten gespeicherten Prozeduren weisen zwei erforderliche Optionen auf:

TRANSACTION ISOLATION LEVEL. Informationen zu unterstützten Isolationsstufen finden Sie unter Transaktionsisolationsstufen für speicheroptimierte Tabellen .

LANGUAGE. Die Sprache der gespeicherten Prozedur muss auf eine der verfügbaren Sprachen bzw. einen der verfügbaren Sprachenaliase festgelegt werden.

Weitere Informationen

Nativ kompilierte gespeicherte Prozeduren