Exemplo Hello World

O exemplo Hello World demonstra as operações básicas envolvidas na criação, na implantação e no teste de um procedimento armazenado com base na integração CLR (common language runtime). Esse exemplo também demonstra como retornar dados por meio de um registro, que é dinamicamente construído pelo procedimento armazenado e retornado ao chamador.

O procedimento armazenado HelloWorld retorna a a cadeia de caracteres "Hello world!" em um conjunto de resultados que consiste em uma linha. Esse exemplo ilustra alguns usos das classes Microsoft.SqlServer.Server.SqlMetaData, Microsoft.SqlServer.Server.SqlDataRecord e Microsoft.SqlServer.Server.Pipe.

Pré-requisitos

Para criar e executar este projeto, o software a seguir deve estar instalado:

  • SQL Server ou SQL Server Express. É possível obter o SQL Server Express gratuitamente no site de Documentação e Amostras do SQL Server Express

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

  • .NET Framework SDK 2.0 ou posterior ou Microsoft Visual Studio 2005 ou posterior. Você pode obter o .NET Framework SDK 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 CLR, execute as etapas a seguir:

    Habilitando a integração CLR

    • Execute os seguintes comandos Transact-SQL:

    sp_configure 'clr enabled', 1

    GO

    RECONFIGURE

    GO

    ObservaçãoObservação

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

  • O banco de dados AdventureWorks deve estar 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, será preciso solicitar que um administrador conceda a permissão CreateAssembly a você para que seja possível concluir a instalação.

Compilando o exemplo

Crie e execute o exemplo seguindo estas instruções:

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

  2. Se necessário, crie um diretório para seu 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 do C#) e copie o código de exemplo adequado do Visual Basic ou do C# (a seguir) no arquivo.

  4. Compile o código de exemplo no prompt de linha de comando executando uma das seguintes ações, de acordo com sua opção de linguagem.

    • 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. Implante o assembly e o procedimento armazenado executando

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

  8. Execute o script de teste com o seguinte comando

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

  10. Execute o script com o seguinte comando

    • sqlcmd -E -I -i cleanup.sql

Código de exemplo

As listagens de código deste exemplo são as seguintes.

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

Este é o script de instalação do 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

Esse é o test.sql, que testa o exemplo por meio da execução do 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

Conceitos

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