Ejemplo de Hola a todos
El ejemplo Hola a todos muestra las operaciones básicas relacionadas con la creación, implementación y prueba de un procedimiento almacenado simple basado en la integración de Common Language Runtime (CLR). En este ejemplo se muestra también cómo se devuelven datos a través de un registro, que el procedimiento almacenado construye y devuelve dinámicamente al autor de la llamada.
El procedimiento almacenado HelloWorld devuelve la cadena “¡Hola a todos!” en un conjunto de resultados que contiene una sola fila. En este ejemplo se muestran algunos usos de las clases Microsoft.SqlServer.Server.SqlMetaData, Microsoft.SqlServer.Server.SqlDataRecord y Microsoft.SqlServer.Server.Pipe.
Requisitos previos
Para crear y ejecutar este proyecto se debe instalar el siguiente software:
SQL Server o SQL Server Express. Puede obtener SQL Server Express de forma gratuita desde el sitio web de documentación y ejemplos de SQL Server Express.
La base de datos AdventureWorks que está disponible en el sitio web para desarrolladores de SQL Server.
.NET Framework SDK 2.0 o posterior, o Microsoft Visual Studio 2005 o posterior. Puede obtener .NET Framework SDK de forma gratuita.
Además, se deben cumplir las siguientes condiciones:
La instancia de SQL Server que está utilizando debe tener habilitada la integración con CLR.
Para habilitar la integración con CLR, siga estos pasos:
Habilitar la integración con CLR
- Ejecute los siguientes comandos Transact-SQL:
sp_configure 'clr enabled', 1
GO
RECONFIGURE
GO
[!NOTA]
Para habilitar CLR, debe tener el permiso de nivel de servidor ALTER SETTINGS, que se concede implícitamente a los miembros de los roles fijos de servidor sysadmin y serveradmin.
La base de datos de AdventureWorks debe estar instalada en la instancia de SQL Server que está utilizando.
Si no es administrador de la instancia de SQL Server que está utilizando, debe hacer que un administrador le conceda el permiso CreateAssembly para completar la instalación.
Generar el ejemplo
Cree y ejecute el ejemplo utilizando las siguientes instrucciones:
Abra un símbolo del sistema de Visual Studio o de .NET Framework.
Si es necesario, cree un directorio para el ejemplo. Para este ejemplo, utilizaremos C:\MySample.
En c:\MySample, cree HelloWorld.vb (para el ejemplo de Visual Basic) o HelloWorld.cs (para el ejemplo de C#) y copie el código muestra de Visual Basic o de C# que corresponda (más abajo) en el archivo.
Compile el código muestra desde el símbolo del sistema ejecutando uno de los comandos siguientes, dependiendo de su opción de lenguaje.
vbc C:HelloWorld.vb /target:library
csc /target:library HelloWorld.cs
Copie el código de instalación de Transact-SQL en un archivo y guárdelo como Install.sql en el directorio de ejemplo.
Implemente el ensamblado y el procedimiento almacenado ejecutando
- sqlcmd -E -I -i install.sql -v root = "C:\MySample\"
Copie el script de comando de prueba de Transact-SQL en un archivo y guárdelo como test.sql en el directorio de ejemplo.
Ejecute el script de prueba con el siguiente comando
- sqlcmd -E -I -i test.sql
Copie el script de limpieza de Transact-SQL en un archivo y guárdelo como cleanup.sql en el directorio de ejemplo.
Ejecute el script con el siguiente comando
- sqlcmd -E -I -i cleanup.sql
Código muestra
A continuación se muestran las listas de código para este ejemplo.
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 es el script de instalación de Transact-SQL (Install.sql), que implementa el ensamblado y crea el procedimiento almacenado en la base de datos.
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
Este es el script test.sql, que prueba el ejemplo ejecutando el procedimiento almacenado.
use AdventureWorks
go
execute usp_HelloWorld
USE AdventureWorks;
GO
IF EXISTS (SELECT * FROM sys.procedures WHERE [name] = 'usp_HelloWorld')
DROP PROCEDURE usp_HelloWorld;
GO
El script Transact-SQL siguiente quita el ensamblado y el procedimiento almacenado de la base de datos.
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
Vea también
Conceptos
Escenarios de uso y ejemplos para la integración de Common Language Runtime (CLR)