Partilhar via


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 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 software a seguir deve estar instalado:

  • SQL Server ou SQL Server Express. Você pode obter 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 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 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 integração CLR

    • Execute os seguintes comandos Transact-SQL:

    sp_configure 'clr enabled', 1

    GO

    RECONFIGURE

    GO

    Observaçã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 ser instalado na instância SQL Server que você está usando.

  • Se você não for um administrador da instância 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 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 o 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 do 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 o seguinte

    • 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 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

Exemplo de código

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  

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  

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

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