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 fixassysadmin
eserveradmin
.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:
Abra um prompt de comando do Visual Studio ou do .NET Framework.
Se necessário, crie um diretório para o seu exemplo. Para este exemplo, usaremos C:\MySample.
Em c:\MySample, crie
HelloWorld.vb
(para o exemplo do Visual Basic) ouHelloWorld.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 do Transact-SQL em um arquivo e salve-o como
Install.sql
no diretório de exemplo.Implante o assembly e o procedimento armazenado executando o seguinte
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 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
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)