Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Comment créer une procédure stockée liée au schéma dans SQL Server

Si vous avez déjà créé une UDF liée à un schéma, vous saurez que la liaison de schéma consiste simplement à ajouter WITH SCHEMABINDING à votre définition. Il en va de même lorsque vous créez une vue liée au schéma.

Les procédures stockées sont un peu différentes.

Seules les procédures stockées compilées en mode natif peuvent être liées au schéma. En fait, les procédures stockées compilées nativement doivent être lié au schéma. Vous ne pouvez pas créer une procédure stockée compilée en mode natif sans la lier au schéma.

Mais si vous essayez de lier au schéma une procédure normale (compilée de manière non native), vous obtiendrez une erreur.

Exemple de procédure stockée liée au schéma

Voici un exemple de création d'une procédure stockée liée au schéma (compilée en mode natif).

CREATE PROCEDURE dbo.usp_GetCowsByName @cowname varchar(70)WITH SCHEMABINDING, NATIVE_COMPILATIONASBEGIN ATOMIC WITH ( TRANSACTION ISOLATION LEVEL =SNAPSHOT, LANGUAGE =N'us_english' ) SELECT CowId, CowName, PhoneFROM dbo.CowsWHERE CowName =@cownameEND;GO 

J'ai inclus le WITH SCHEMABINDING argument, mais j'ai également inclus NATIVE_COMPILATION , ce qui indique que la procédure est compilée nativement.

Notez également le ATOMIC WITH bloc. Ceci est requis pour les procédures stockées compilées en mode natif.

Ce code a créé une procédure stockée liée au schéma.

Erreur ? Vérifiez ces prérequis

Les procédures stockées compilées en mode natif nécessitent que toutes les tables sous-jacentes soient des tables optimisées en mémoire.

Pour créer des tables à mémoire optimisée, vous devez d'abord créer un groupe de fichiers à mémoire optimisée.

Voici le code que j'ai utilisé pour créer le groupe de fichiers à mémoire optimisée, son fichier associé et la table à mémoire optimisée que je référence dans la procédure stockée :

ALTER DATABASE Test ADD FILEGROUP imoltp_test CONTAINS MEMORY_OPTIMIZED_DATA;GOALTER DATABASE Test ADD FILE (name='imoltp_test1', filename='/var/opt/mssql/data/imoltp_test1.mdf') TO FILEGROUP imoltp_test;GOCREATE 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 , DURABILITÉ =SCHEMA_AND_DATA)GO

Donc, si vous voulez copier et coller mon code, vous devrez d'abord l'exécuter, puis le code de procédure stockée ci-dessus.

Notez également que j'utilise SQL Server pour Linux, et donc les chemins de fichiers utilisent les conventions Linux. Si vous créez un fichier de base de données sous Windows, vous devrez le modifier pour utiliser la convention de chemin de fichier Windows (et assurez-vous d'utiliser un chemin de fichier qui existe sur votre système).