Compartilhar via


Exemplo de Olá, Mundo

O exemplo Hello World demonstra as operações básicas envolvidas na criação, implantação e teste de um procedimento armazenado baseado em integração do CLR (Common Language Runtime). Este exemplo também demonstra como retornar dados por meio de um registro, que é construído dinamicamente pelo procedimento armazenado e retornado ao chamador.

O HelloWorld procedimento armazenado retorna a cadeia de caracteres "Olá, mundo!" em um conjunto de resultados que consiste em uma linha. Este exemplo ilustra alguns usos para as classes Microsoft.SqlServer.Server.SqlMetaData, Microsoft.SqlServer.Server.SqlDataRecord e Microsoft.SqlServer.Server.Pipe.

Pré-requisitos

Para criar e executar este projeto, o seguinte software deve ser instalado:

  • SQL Server ou SQL Server Express. Você pode obter o SQL Server Express gratuitamente no site de Documentação e Exemplos do SQL Server Express

  • O banco de dados AdventureWorks que está disponível no site do Desenvolvedor do SQL Server

  • SDK do .NET Framework 2.0 ou posterior ou Microsoft Visual Studio 2005 ou posterior. Você pode obter o SDK do .NET Framework gratuitamente.

  • Além disso, as seguintes condições devem ser atendidas:

  • A instância do SQL Server que você está usando deve ter a integração CLR habilitada.

  • Para habilitar a integração do CLR, execute as seguintes etapas:

    Habilitando integração CLR

    • Execute os seguintes comandos de Transact-SQL:

    sp_configure 'clr enabled', 1

    GO

    RECONFIGURE

    GO

    Observação

    Para habilitar o CLR, você deve ter ALTER SETTINGS permissão de nível de servidor, que é mantida implicitamente por membros das funções de servidor fixas e sysadmin de serveradmin membros.

  • O banco de dados AdventureWorks deve ser instalado na instância do SQL Server que você está usando.

  • Se você não for um administrador da instância do SQL Server que está usando, deverá ter um administrador concedendo a você a permissão CreateAssembly para concluir a instalação.

Compilando o exemplo

Crie e execute o exemplo usando as seguintes instruções:

  1. Abra um prompt de comando do Visual Studio ou do .NET Framework.

  2. Se necessário, crie um diretório para o exemplo. Para este exemplo, usaremos C:\MySample.

  3. Em c:\MySample, crie HelloWorld.vb (para o exemplo do Visual Basic) ou HelloWorld.cs (para o exemplo de C#) e copie o código de exemplo do Visual Basic ou C# apropriado (abaixo) no arquivo.

  4. Compile o código de exemplo do prompt de linha de comando executando um dos seguintes, dependendo da sua escolha de idioma.

    • vbc C:HelloWorld.vb /target:library

    • csc /target:library HelloWorld.cs

  5. Copie o código de instalação Transact-SQL em um arquivo e salve-o como Install.sql no diretório de exemplo.

  6. Implantar o assembly e o procedimento armazenado executando

    • sqlcmd -E -I -i install.sql -v root = "C:\MySample\"
  7. Copie Transact-SQL script de comando de teste em um arquivo e salve-o como test.sql no diretório de exemplo.

  8. Executar o script de teste com o comando a seguir

    • sqlcmd -E -I -i test.sql
  9. Copie o script de limpeza Transact-SQL em um arquivo e salve-o como cleanup.sql no diretório de exemplo.

  10. Executar o script com o comando a seguir

    • sqlcmd -E -I -i cleanup.sql

Exemplo de código

Veja a seguir as listagens de código para este exemplo.

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  

Esse é o script de instalação Transact-SQL (Install.sql), que implanta o assembly e cria o procedimento armazenado no banco de dados.

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  

Isto é test.sql, que testa o exemplo executando o procedimento armazenado.

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

O Transact-SQL a seguir remove o assembly e o procedimento armazenado do banco de dados.

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  

Consulte Também

Cenários de uso e exemplos para a integração de CLR (Common Language Runtime)