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 este tema se proporciona información general sobre los espacios de nombres y las bibliotecas necesarios para compilar objetos de base de datos mediante la integración de SQL Server con Common Language Runtime (CLR) de .NET Framework. También se muestra cómo escribir, compilar y ejecutar un procedimiento almacenado CLR simple escrito en Microsoft Visual C#.
Espacios de nombres necesarios
A partir de SQL Server. La funcionalidad de la integración CLR se expone en un ensamblado denominado system.data.dll, que forma parte de .NET Framework. Este ensamblado puede encontrarse en la caché de ensamblados global (GAC) o en el directorio de .NET Framework. Por lo general, tanto las herramientas de línea de comandos como Microsoft Visual Studio agregan automáticamente una referencia a este ensamblado, así que no es necesario agregarlo manualmente.
El ensamblado system.data.dll contiene los espacios de nombres siguientes, que son necesarios para compilar objetos de base de datos CLR:
System.Data
System.Data.Sql
Microsoft.SqlServer.Server
System.Data.SqlTypes
Escribir un procedimiento almacenado "Hello World" simple
Copie y pegue el siguiente código de Visual C# o Microsoft Visual Basic en un editor de texto y guárdelo en un archivo denominado "helloworld.cs" o "helloworld.vb".
using System;
using System.Data;
using Microsoft.SqlServer.Server;
using System.Data.SqlTypes;
public class HelloWorldProc
{
[Microsoft.SqlServer.Server.SqlProcedure]
public static void HelloWorld(out string text)
{
SqlContext.Pipe.Send("Hello world!" + Environment.NewLine);
text = "Hello world!";
}
}
Imports System
Imports System.Data
Imports Microsoft.SqlServer.Server
Imports System.Data.SqlTypes
Imports System.Runtime.InteropServices
Public Class HelloWorldProc
<Microsoft.SqlServer.Server.SqlProcedure> _
Public Shared Sub HelloWorld(<Out()> ByRef text as String)
SqlContext.Pipe.Send("Hello world!" & Environment.NewLine)
text = "Hello world!"
End Sub
End Class
Este programa simple contiene un solo método estático en una clase pública. Este método usa dos clases nuevas, SqlContext
y SqlPipe
, para crear los objetos de base de datos administrados a fin de generar un mensaje de texto simple. El método también asigna la cadena "Hello world!" como valor de un parámetro de salida. Este método se puede declarar como un procedimiento almacenado en el procedimiento almacenado de Transact-SQL.
Ahora compilaremos este programa como una biblioteca, lo cargaremos en SQL Server y lo ejecutaremos como un procedimiento almacenado.
Compilar el procedimiento almacenado "Hello World"
Archivos de redistribución de Microsoft .NET Framework de forma predeterminada. Estos archivos incluyen csc.exe y vbc.exe, los compiladores de línea de comandos de Visual C# y Visual Basic. Para compilar el ejemplo, debe modificar la variable de ruta de acceso para que apunte al directorio que contiene los archivos csc.exe o vbc.exe. Ésta es la ruta de instalación predeterminada de .NET Framework.
C:\Windows\Microsoft.NET\Framework\(version)
La versión incluye el número de versión del componente .NET Framework redistribuible instalado. Por ejemplo:
C:\Windows\Microsoft.NET\Framework\v2.0.31113
Una vez agregado el directorio .NET Framework a la ruta de acceso, puede compilar el procedimiento almacenado de ejemplo en un ensamblado con el siguiente comando. La opción /target
permite compilarlo en un ensamblado.
Para los archivos de origen de Visual C#:
csc /target:library helloworld.cs
Para los archivos de origen de Visual Basic:
vbc /target:library helloworld.vb
Estos comandos inician el compilador de Visual C# o Visual Basic mediante la opción /target para especificar la creación de un archivo DLL de biblioteca.
Cargar y ejecutar el procedimiento almacenado "Hello World" en SQL Server
Una vez que el procedimiento de ejemplo se haya compilado correctamente, puede probarlo en SQL Server Management Studio y crear una nueva consulta, conectándose a una base de datos de prueba adecuada (por ejemplo, la base de datos de ejemplo AdventureWorks).
La capacidad de ejecutar código de Common Language Runtime (CLR) se establece en OFF de forma predeterminada en SQL Server. El código CLR se puede habilitar mediante el procedimiento almacenado del sistema sp_configure . Para más información, consulte Enabling CLR Integration.
Tendremos que crear el ensamblado de modo que podamos obtener acceso al procedimiento almacenado. Para este ejemplo, vamos a suponer que ha creado el ensamblado helloworld.dll en el directorio C:\. Agregue la siguiente instrucción Transact-SQL a la consulta.
CREATE ASSEMBLY helloworld from 'c:\helloworld.dll' WITH PERMISSION_SET = SAFE
Una vez creado el ensamblado, podremos obtener acceso a nuestro método HelloWorld mediante la instrucción CREATE PROCEDURE. Llamaremos a nuestro procedimiento almacenado "hello":
CREATE PROCEDURE hello
@i nchar(25) OUTPUT
AS
EXTERNAL NAME helloworld.HelloWorldProc.HelloWorld
-- if the HelloWorldProc class is inside a namespace (called MyNS),
-- the last line in the create procedure statement would be
-- EXTERNAL NAME helloworld.[MyNS.HelloWorldProc].HelloWorld
Después de haber creado el procedimiento, se puede ejecutar igual que un procedimiento almacenado normal escrito en Transact-SQL. Ejecute el comando siguiente:
DECLARE @J nchar(25)
EXEC hello @J out
PRINT @J
Se mostrará el siguiente resultado en la ventana de mensajes de SQL Server Management Studio.
Hello world!
Hello world!
Quitar el ejemplo de procedimiento almacenado "Hello World"
Cuando haya terminado de ejecutar el procedimiento almacenado de ejemplo, puede quitar el procedimiento y el ensamblado de la base de datos de prueba.
En primer lugar, quite el procedimiento mediante el comando de drop procedure.
IF EXISTS (SELECT name FROM sysobjects WHERE name = 'hello')
drop procedure hello
Una vez quitado el procedimiento, puede quitar el ensamblado que contiene su código de ejemplo.
IF EXISTS (SELECT name FROM sys.assemblies WHERE name = 'helloworld')
drop assembly helloworld
Consulte también
Procedimientos almacenados de CLR
Extensiones específicas en proceso de SQL Server a ADO.NET
Depurar objetos de base de datos CLR
Seguridad de la integración CLR