Freigeben über


Erstellen nativ kompilierter gespeicherter Prozeduren

Gilt für: SQL Server Azure SQL-Datenbank Azure SQL Managed Instance

Von systemintern kompilierten gespeicherten Prozeduren wird nicht die vollständige Transact-SQL-Programmier- und -Abfrageoberfläche implementiert. Es gibt bestimmte Transact-SQL-Konstrukte, die innerhalb systemintern kompilierter gespeicherter Prozeduren nicht verwendet werden können. Weitere Informationen finden Sie unter Unterstützte Funktionen für nativ kompilierte T-SQL-Module.

Die folgenden Transact-SQL-Funktionen werden nur für nativ 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.

Systemintern 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 ist an NATIVE_COMPILATION erkennbar, dass diese gespeicherte Transact-SQL-Prozedur eine systemintern 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. Die Tabellen, auf die in der Prozedur verwiesen wird, müssen den Schemanamen enthalten, und Platzhalterzeichen (*) sind in Abfragen nicht zulässig (also ohne SELECT * from...). SCHEMABINDING wird nur in dieser SQL-Server-Version von für systemintern kompilierte gespeicherte Prozeduren 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