Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

So erstellen Sie eine schemagebundene gespeicherte Prozedur in SQL Server

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).