Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En el ejemplo Hello World se muestran las operaciones básicas implicadas en la creación, implementación y prueba de un procedimiento almacenado basado en la integración simple de Common Language Runtime (CLR). En este ejemplo también se muestra cómo devolver datos a través de un registro, que se construye dinámicamente mediante el procedimiento almacenado y se devuelve al autor de la llamada.
El HelloWorld procedimiento almacenado devuelve la cadena "Hello world!" en un conjunto de resultados que consta de una fila. En este ejemplo se muestran algunos usos para las clases Microsoft.SqlServer.Server.SqlMetaData, Microsoft.SqlServer.Server.SqlDataRecord y Microsoft.SqlServer.Server.Pipe.
Prerrequisitos
Para crear y ejecutar este proyecto, debe instalarse 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
SDK de .NET Framework 2.0 o posterior o Microsoft Visual Studio 2005 o posterior. Puede obtener el SDK de .NET Framework de forma gratuita.
Además, se deben cumplir las siguientes condiciones:
La instancia de SQL Server que usa debe tener habilitada la integración clR.
Para habilitar la integración clR, realice los pasos siguientes:
Habilitar la integración con CLR
- Ejecute los siguientes comandos Transact-SQL:
sp_configure 'clr enabled', 1GORECONFIGUREGONota:
Para habilitar CLR, debe tener
ALTER SETTINGSpermiso de nivel de servidor, que se mantiene implícitamente en los miembros de lossysadminroles fijos de servidor yserveradmin.La base de datos AdventureWorks debe instalarse en la instancia de SQL Server que está usando.
Si no es administrador para la instancia de SQL Server que usa, debe tener un permiso de administrador para crearAssembly para completar la instalación.
Compilar el ejemplo
Cree y ejecute el ejemplo mediante las instrucciones siguientes:
Abra un símbolo del sistema de Visual Studio o .NET Framework.
Si es necesario, cree un directorio para el ejemplo. En este ejemplo, usaremos C:\MySample.
En c:\MySample, cree
HelloWorld.vb(para el ejemplo de Visual Basic) oHelloWorld.cs(para el ejemplo de C#) y copie el código de ejemplo de Visual Basic o C# adecuado (a continuación) en el archivo.Compile el código de ejemplo desde el símbolo de la línea de comandos ejecutando uno de los siguientes, según su elección de idioma.
vbc C:HelloWorld.vb /target:librarycsc /target:library HelloWorld.cs
Copie el código de instalación Transact-SQL en un archivo y guárdelo como
Install.sqlen el directorio de ejemplo.Implementación del ensamblado y el procedimiento almacenado mediante la ejecución
sqlcmd -E -I -i install.sql -v root = "C:\MySample\"
Copie Transact-SQL script de comando de prueba en un archivo y guárdelo como
test.sqlen el directorio de ejemplo.Ejecute el script de prueba con el comando siguiente.
sqlcmd -E -I -i test.sql
Copie el script de limpieza Transact-SQL en un archivo y guárdelo como
cleanup.sqlen el directorio de ejemplo.Ejecute el script con el comando siguiente.
sqlcmd -E -I -i cleanup.sql
Código de ejemplo
A continuación se muestran las listas de código de 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
Se trata de 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 siguiente Transact-SQL 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
Véase también
Escenarios de uso y ejemplos para la integración de Common Language Runtime (CLR)