Partager via


Exemple Hello World

L’exemple Hello World illustre les opérations de base impliquées dans la création, le déploiement et le test d’une procédure stockée basée sur l’intégration basée sur l’intégration (CLR) simple. Cet exemple montre également comment retourner des données via un enregistrement, qui est construit dynamiquement par la procédure stockée et retourné à l’appelant.

La HelloWorld procédure stockée retourne la chaîne « Hello world ! » dans un jeu de résultats composé d’une ligne. Cet exemple illustre certaines utilisations pour les classes Microsoft.SqlServer.Server.SqlMetaData, Microsoft.SqlServer.Server.SqlDataRecord et Microsoft.SqlServer.Server.Pipe.

Conditions préalables

Pour créer et exécuter ce projet, les logiciels suivants doivent être installés :

  • SQL Server ou SQL Server Express. Vous pouvez obtenir SQL Server Express gratuitement à partir de la documentation et des exemples de la documentation SQL Server Express et du site Web Exemples

  • Base de données AdventureWorks disponible sur le site web du développeur SQL Server

  • Sdk .NET Framework 2.0 ou version ultérieure ou Microsoft Visual Studio 2005 ou version ultérieure. Vous pouvez obtenir gratuitement le Kit de développement logiciel (SDK) .NET Framework.

  • En outre, les conditions suivantes doivent être remplies :

  • L’instance SQL Server que vous utilisez doit avoir activé l’intégration clR.

  • Pour activer l’intégration du CLR, procédez comme suit :

    Activation de l'intégration du CLR

    • Exécutez les commandes Transact-SQL suivantes :

    sp_configure 'clr enabled', 1

    GO

    RECONFIGURE

    GO

    Remarque

    Pour activer clR, vous devez disposer ALTER SETTINGS d’une autorisation au niveau du serveur, qui est implicitement détenue par les membres des sysadmin rôles serveur fixes et serveradmin les rôles serveur fixes.

  • La base de données AdventureWorks doit être installée sur l’instance SQL Server que vous utilisez.

  • Si vous n’êtes pas administrateur de l’instance SQL Server que vous utilisez, vous devez disposer d’une autorisation CreateAssembly pour terminer l’installation.

Génération de l’exemple

Créez et exécutez l’exemple à l’aide des instructions suivantes :

  1. Ouvrez une invite de commandes Visual Studio ou .NET Framework.

  2. Si nécessaire, créez un répertoire pour votre exemple. Pour cet exemple, nous allons utiliser C :\MySample.

  3. Dans c :\MySample, créez HelloWorld.vb (pour l’exemple Visual Basic) ou HelloWorld.cs (pour l’exemple C#) et copiez l’exemple de code Visual Basic ou C# approprié (ci-dessous) dans le fichier.

  4. Compilez l’exemple de code à partir de l’invite de ligne de commande en exécutant l’un des éléments suivants, en fonction de votre choix de langue.

    • vbc C:HelloWorld.vb /target:library

    • csc /target:library HelloWorld.cs

  5. Copiez le code d’installation Transact-SQL dans un fichier et enregistrez-le comme Install.sql dans l’exemple de répertoire.

  6. Déployer l’assembly et la procédure stockée en exécutant

    • sqlcmd -E -I -i install.sql -v root = "C:\MySample\"
  7. Copiez Transact-SQL script de commande de test dans un fichier et enregistrez-le comme test.sql dans l’exemple de répertoire.

  8. Exécuter le script de test avec la commande suivante

    • sqlcmd -E -I -i test.sql
  9. Copiez le script de nettoyage Transact-SQL dans un fichier et enregistrez-le comme cleanup.sql dans l’exemple de répertoire.

  10. Exécutez le script avec la commande suivante

    • sqlcmd -E -I -i cleanup.sql

Exemple de code

Voici les listes de code pour cet exemple.

C#

using System;  
using System.Data;  
using System.Data.SqlClient;  
using System.Data.SqlTypes;  
using Microsoft.SqlServer.Server;  
public partial class StoredProcedures  
{  
    [Microsoft.SqlServer.Server.SqlProcedure]  
    public static void HelloWorld()  
    {  
        Microsoft.SqlServer.Server.SqlMetaData columnInfo  
                = new Microsoft.SqlServer.Server.SqlMetaData("Column1", SqlDbType.NVarChar, 12);  
        SqlDataRecord greetingRecord  
            = new SqlDataRecord(new Microsoft.SqlServer.Server.SqlMetaData[] { columnInfo });  
        greetingRecord.SetString(0, "Hello world!");  
        SqlContext.Pipe.Send(greetingRecord);  
    }  
};  
  

Visual Basic

Imports System  
Imports System.Data  
Imports System.Data.Sql  
Imports System.Data.SqlTypes  
Imports Microsoft.SqlServer.Server  
  
Partial Public NotInheritable Class StoredProcedures  
    <Microsoft.SqlServer.Server.SqlProcedure()> _  
    Public Shared Sub HelloWorld()  
        Dim columnInfo As New Microsoft.SqlServer.Server.SqlMetaData("Column1", _  
            SqlDbType.NVarChar, 12)  
        Dim greetingRecord As New SqlDataRecord(New  _  
            Microsoft.SqlServer.Server.SqlMetaData() {columnInfo})  
        greetingRecord.SetString(0, "Hello World!")  
        SqlContext.Pipe.Send(greetingRecord)  
    End Sub  
End Class  

Il s’agit du script d’installation Transact-SQL (Install.sql), qui déploie l’assembly et crée la procédure stockée dans la base de données.

USE AdventureWorks  
GO  
IF EXISTS (SELECT * FROM sys.procedures WHERE [name] = 'usp_HelloWorld')  
DROP PROCEDURE usp_HelloWorld;  
GO  
IF EXISTS (SELECT * FROM sys.assemblies WHERE [name] = 'HelloWorld')  
DROP ASSEMBLY HelloWorld;  
GO  
DECLARE @SamplesPath nvarchar(1024)  
set @SamplesPath = '$(root)'  
CREATE ASSEMBLY HelloWorld   
FROM @SamplesPath + 'HelloWorld.dll'  
WITH permission_set = Safe;  
GO  
  
CREATE PROCEDURE usp_HelloWorld  
--(  
--    @Greeting nvarchar(12) OUTPUT  
--)  
AS EXTERNAL NAME HelloWorld.[StoredProcedures].HelloWorld;  
GO  

Il s’agit test.sqldu test de l’exemple en exécutant la procédure stockée.

use AdventureWorks  
go  
execute usp_HelloWorld  
  
USE AdventureWorks;  
GO  
IF EXISTS (SELECT * FROM sys.procedures WHERE [name] = 'usp_HelloWorld')  
DROP PROCEDURE usp_HelloWorld;  
GO  

La Transact-SQL suivante supprime l’assembly et la procédure stockée de la base de données.

USE AdventureWorks  
GO  
  
IF EXISTS (SELECT * FROM sys.procedures WHERE [name] = 'usp_HelloWorld')  
DROP PROCEDURE usp_HelloWorld;  
GO  
  
IF EXISTS (SELECT * FROM sys.assemblies WHERE [name] = 'HelloWorld')  
DROP ASSEMBLY HelloWorld;  
GO  

Voir aussi

Scénarios et exemples d'utilisation pour l'intégration du CLR (Common Language Runtime)