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çã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:
Abra um prompt de comando do Visual Studio ou do .NET Framework.
Se necessário, crie um diretório para seu exemplo. Para este exemplo, usaremos C:\MySample.
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.
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
Copie o código de instalação Transact-SQL em um arquivo e salve-o como Install.sql no diretório de exemplo.
Implante o assembly e o procedimento armazenado executando
- sqlcmd -E -I -i install.sql -v root = "C:\MySample\"
Copie o script de comando de teste do Transact-SQL em um arquivo e salve-o como test.sql no diretório de exemplo.
Execute o script de teste com o seguinte comando
- sqlcmd -E -I -i test.sql
Copie o script de limpeza do Transact-SQL em um arquivo e salve-o como cleanup.sql no diretório de exemplo.
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)