Wenn Sie jemals eine schemagebundene UDF erstellt haben, wissen Sie, dass die Schemabindung nur eine Frage des Hinzufügens von WITH SCHEMABINDING
ist zu deiner Definition. Dasselbe gilt, wenn Sie eine schemagebundene Ansicht erstellen.
Gespeicherte Prozeduren sind etwas anders.
Nur nativ kompilierte gespeicherte Prozeduren können schemagebunden werden. Tatsächlich müssen nativ kompilierte Stored Procedures schemagebunden sein. Sie können keine nativ kompilierte gespeicherte Prozedur ohne Schemabindung erstellen.
Aber wenn Sie versuchen, eine reguläre (nicht nativ kompilierte) Prozedur per Schema zu binden, erhalten Sie eine Fehlermeldung.
Beispiel einer schemagebundenen gespeicherten Prozedur
Hier ist ein Beispiel für das Erstellen einer schemagebundenen (nativ kompilierten) gespeicherten Prozedur.
CREATE PROCEDURE dbo.usp_GetCowsByName @cowname varchar(70) WITH SCHEMABINDING, NATIVE_COMPILATION AS BEGIN ATOMIC WITH ( TRANSACTION ISOLATION LEVEL = SNAPSHOT, LANGUAGE = N'us_english' ) SELECT CowId, CowName, Phone FROM dbo.Cows WHERE CowName = @cowname END; GO
Ich habe den WITH SCHEMABINDING
eingefügt Argument, aber ich habe auch NATIVE_COMPILATION
eingefügt , was darauf hinweist, dass die Prozedur nativ kompiliert ist.
Beachten Sie auch das ATOMIC WITH
Block. Dies ist für nativ kompilierte gespeicherte Prozeduren erforderlich.
Dieser Code hat eine schemagebundene gespeicherte Prozedur erstellt.
Fehler? Überprüfen Sie diese Voraussetzungen
Systemintern kompilierte gespeicherte Prozeduren erfordern, dass alle zugrunde liegenden Tabellen speicheroptimierte Tabellen sind.
Um speicheroptimierte Tabellen zu erstellen, müssen Sie zunächst eine speicheroptimierte Dateigruppe erstellen.
Hier ist der Code, den ich verwendet habe, um die speicheroptimierte Dateigruppe, die zugehörige Datei und die speicheroptimierte Tabelle zu erstellen, auf die ich in der gespeicherten Prozedur verweise:
ALTER DATABASE Test ADD FILEGROUP imoltp_test CONTAINS MEMORY_OPTIMIZED_DATA; GO ALTER DATABASE Test ADD FILE (name='imoltp_test1', filename='/var/opt/mssql/data/imoltp_test1.mdf') TO FILEGROUP imoltp_test; GO CREATE TABLE [dbo].[Cows]( [CowId] [int] IDENTITY(1,1) NOT NULL PRIMARY KEY NONCLUSTERED, [CowName] [varchar](70) NULL, [Phone] [varchar](10) NULL ) WITH (MEMORY_OPTIMIZED = ON, DURABILITY = SCHEMA_AND_DATA) GO
Wenn Sie also meinen Code kopieren und einfügen möchten, müssen Sie diesen zuerst ausführen und dann den Code der gespeicherten Prozedur oben.
Beachten Sie auch, dass ich SQL Server für Linux verwende und die Dateipfade daher Linux-Konventionen verwenden. Wenn Sie eine Datenbankdatei unter Windows erstellen, müssen Sie sie ändern, um die Windows-Dateipfadkonvention zu verwenden (und stellen Sie sicher, dass Sie einen Dateipfad verwenden, der auf Ihrem System vorhanden ist).