Bien démarrer avec l’intégration de CLR
S’applique à :SQL Server
Cet article fournit une vue d’ensemble des espaces de noms et bibliothèques nécessaires pour compiler des objets de base de données à l’aide de l’intégration de SQL Server au Common Language Runtime (CLR) du .NET Framework. L’article vous montre également comment écrire, compiler et exécuter une petite procédure stockée CLR écrite en C# et Visual Basic .NET.
Espaces de noms requis
Les composants requis pour développer des objets de base de base de données CLR sont installés avec SQL Server. Les fonctionnalités d’intégration du CLR sont exposées dans un assembly appelé System.Data.dll
, qui fait partie du .NET Framework. Cet assembly se trouve dans le Global Assembly Cache (GAC) et dans le répertoire .NET Framework. En règle générale, une référence à cet assembly est automatiquement ajoutée par les outils en ligne de commande et Visual Studio. Il n’est donc pas nécessaire de l’ajouter manuellement.
L’assembly System.Data.dll
contient les espaces de noms suivants, qui sont requis pour compiler les objets de base de données CLR :
System.Data
System.Data.Sql
Microsoft.SqlServer.Server
System.Data.SqlTypes
Conseil
Le chargement d’objets de base de données CLR sur Linux est pris en charge, mais il doit être généré avec .NET Framework (l’intégration clR SQL Server ne prend pas en charge .NET Core, ou .NET 5 et versions ultérieures). En outre, les assemblys CLR avec le jeu d’autorisations EXTERNAL_ACCESS
ou UNSAFE
ne sont pas pris en charge sur Linux.
Écrire une procédure stockée « Hello World »
Copiez et collez le code C# ou Visual Basic .NET suivant dans un éditeur de texte, puis enregistrez-le dans un fichier nommé helloworld.cs
ou helloworld.vb
.
using System;
using System.Data;
using Microsoft.SqlServer.Server;
using System.Data.SqlTypes;
public class HelloWorldProc
{
[Microsoft.SqlServer.Server.SqlProcedure]
public static void HelloWorld(out string text)
{
SqlContext.Pipe.Send("Hello world!" + Environment.NewLine);
text = "Hello world!";
}
}
Ce programme contient une méthode statique unique sur une classe publique. Cette méthode utilise deux nouvelles classes, SqlContext et SqlPipe, pour créer des objets de base de données managés afin d’obtenir un message textuel simple. La méthode affecte également la chaîne « Hello world ! » comme valeur d’un paramètre out
. Cette méthode peut être déclarée comme une procédure stockée dans SQL Server, puis s’exécuter de la même manière qu’une procédure stockée Transact-SQL.
Compilez ce programme sous la forme d’une bibliothèque, le charger dans SQL Server et exécutez-le en tant que procédure stockée.
Compiler la procédure stockée « Hello World »
SQL Server installe par défaut les fichiers de redistribution .NET Framework. Ces fichiers incluent csc.exe
et vbc.exe
, les compilateurs de ligne de commande pour les programmes C# et Visual Basic .NET. Pour compiler notre exemple, vous devez modifier votre variable de chemin d’accès pour pointer sur le répertoire qui contient csc.exe
ou vbc.exe
. Le chemin d’installation par défaut du .NET Framework est le suivant :
C:\Windows\Microsoft.NET\Framework\(version)
La version contient le numéro de version du .NET Framework installé. Par exemple :
C:\Windows\Microsoft.NET\Framework\v4.8.0
Une fois que vous avez ajouté le répertoire .NET Framework à votre chemin d’accès, vous pouvez compiler l’exemple de procédure stockée dans un assembly avec la commande suivante. L'option /target
vous permet de le compiler en assembly.
Pour les fichiers sources C# :
csc /target:library helloworld.cs
Pour les fichiers sources Visual Basic .NET :
vbc /target:library helloworld.vb
Ces commandes lancent le compilateur C# ou Visual Basic .NET à l’aide de l’option /target
pour spécifier la génération d’une DLL de bibliothèque.
Charger et exécuter la procédure stockée « Hello World » dans SQL Server
Une fois l’exemple de procédure compilé, vous pouvez le tester dans SQL Server. Pour cela, ouvrez SQL Server Management Studio et créez une requête, en vous connectant à une base de données de test appropriée (par exemple, l’exemple de base de données AdventureWorks2022
).
La fonctionnalité d’exécution du code CLR est définie par défaut sur OFF
dans SQL Server. Le code CLR peut être activé à l’aide de la procédure stockée système sp_configure
. Pour plus d’informations, consultez Activer l’intégration CLR.
Nous devons créer l’assembly pour pouvoir accéder à la procédure stockée. Pour cet exemple, nous partons du principe que vous avez créé l’assembly helloworld.dll
dans le répertoire C:\
. Ajoutez l’instruction Transact-SQL suivante à votre requête.
CREATE ASSEMBLY helloworld from 'C:\helloworld.dll' WITH PERMISSION_SET = SAFE
Une fois l’assembly créé, nous pouvons désormais accéder à notre méthode HelloWorld à l’aide de l’instruction CREATE PROCEDURE
. Nous appelons notre procédure stockée hello
:
CREATE PROCEDURE hello
(@i NCHAR (25) OUTPUT)
AS EXTERNAL NAME helloworld.HelloWorldProc.HelloWorld;
Remarque
Dans l’exemple précédent, si la classe HelloWorldProc
se trouve à l’intérieur d’un espace de noms (appelé MyNS
), la dernière ligne de l’instruction create procedure serait EXTERNAL NAME helloworld.[MyNS.HelloWorldProc].HelloWorld;
.
Une fois la procédure créée, elle peut être exécutée comme une procédure stockée normale écrite dans Transact-SQL. Exécutez la commande suivante :
DECLARE @J AS NCHAR (25);
EXECUTE hello @J OUTPUT;
PRINT @J;
Voici la sortie attendue.
Hello world!
Hello world!
Supprimer l’exemple de procédure stockée « Hello World »
Lorsque vous avez terminé d’exécuter l’exemple de procédure stockée, vous pouvez supprimer la procédure et l’assembly de votre base de données de test.
En premier lieu, supprimez la procédure à l'aide de la commande drop procedure.
IF EXISTS (SELECT name
FROM sysobjects
WHERE name = 'hello')
DROP PROCEDURE hello;
Une fois la procédure supprimée, vous pouvez supprimer l’assembly contenant votre exemple de code.
IF EXISTS (SELECT name
FROM sys.assemblies
WHERE name = 'helloworld')
DROP ASSEMBLY helloworld;