Le CLR sur SQL Server 2014
Pour activer le CLR:
sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO
sp_configure 'clr enabled', 1;
GO
RECONFIGURE;
GO
Pour activer l'intégration du CLR, vous devez disposer de l'autorisation de niveau serveur ALTER SETTINGS
qui est attribuée uniquement aux membres des rôles serveur fixes sysadmin et serveradmin.
Opérations sur les Assembly
CREATE
On insère une fonction CLR dans la base de données en faisant CREATE ASSEMBLY <nom de l'assembly> FROM <fichier librairie>
. Le fichier de l'assembly est la librairie résultante de la compilation du code. Ensuite, on doit créer une fonction stockée qui appelle la fonction CLR.
On peut créer un assembly dans la base de données de cette façon:
CREATE ASSEMBLY CLRFunctions FROM 'C:\SQLServerCLRSortString.dll'
GO
CREATE FUNCTION dbo.SortString (
@name AS NVARCHAR(255)
)
RETURNS NVARCHAR(255)
AS EXTERNAL NAME CLRFunctions.CLRFunctions.SortString
GO
Permission
La permission nécessaire pour créer un assembly:
USE DatabaseName
GO
GRANT CREATE ASSEMBLY TO [DOMAIN\USER]
ALTER
Pour mettre à jour un assembly, on est pas obligé de supprimer la procédure stockée qui appelle l'assembly ni l'assembly lui-même, on peut juste faire un ALTER
.
ALTER ASSEMBLY <assemblyname> FROM 'c:\temp\myprocs.dll'
DROP
DROP ASSEMBLY <assembly name>
Il peut y avoir des dépendances sur les assemblies. Il suffit d'aller dans SSMS et aller dans Programmabilité sous la base de données. On fait un clic-droit sur l'assembly qui nous intéresse et choisir Afficher les dépendances.
Débogguer le CLR
Note | Testé avec Visual Studio 2013 Professional et SQL Server 2014. |
Ayant un projet SQL Database dans la solution de Visual Studio:
Démarrer Visual Studio en tant qu'administrateur.
Ajouter un répertoire Test Scripts dans le projet de base de données.
Faire un clic-droit et faire Add → Script… et choisir Script (Not in Build).
Éditer le script qui va exécuter le CLR (ex: EXEC dbo.StoredProcQuiExecuteFonction
).
Dans SQL Server Object Explorer, ajouter le serveur auquel on veut se connecter.
Faire un clic-droit sur le serveur ajouté et sélectionner Application Debugging et Allow SQL/CLR Debugging.
Dans Solution Explorer, aller dans les propriétés du projet de base de données.
Dans l'onglet Project Settings, s'assurer que le Target est correctement configuré (dans notre cas c'est SQL Server 2014).
Cliquer sur le bouton Database Settings… et s'assurer que la collation est correcte.
Dans l'onglet SQLCLR s'assurer que le Target Framework et Permission Level sont corrects.
Dans l'onglet Build s'assurer que le répertoire est accessible à l'instance de SQL Server.
Dans l'onglet Debug, sélectionner Startup script et spécifier le script de test créé plus tôt.
Configurer le Target Connection String.
Une fois ceci terminé s'assurer de faire un Clean et un Build du projet (ou de la solution).
Déployer le code CLR sur le serveur SQL (dans mon cas j'ai utilisé le Schema Compare et utilisé l'option Update).
Ajouter un point d'arrêt dans le code et faire DEBUG → Start Debugging. L'exécution s'arrête dans le script de test à la première ligne.
Troubleshooting
Permissions
S'il y a l'erreur Unable to debug .NET code. Could not attach to SQL Server process on 'computer_name'., il faut démarrer Visual Studio en tant qu'administrateur Windows.
EXTERNAL ACCESS ASSEMBLY permission was denied on object 'server', database 'master'. → Pour régler ceci on peut ajouter le rôle sysadmin à l'utilisateur SQL.
Sources