Krypton Solid

La última tecnología en raciones de 5 minutos

Funciones definidas por el usuario

Creando basado en .NET funciones definidas por el usuario (UDF) es otra característica nueva que está habilitada por la integración de .NET CLR. Las funciones definidas por el usuario que devuelven tipos escalares deben devolver un tipo de datos .NET que se pueda convertir implícitamente en un tipo de datos de SQL Server. Las funciones escalares escritas con .NET Framework pueden superar significativamente a T-SQL en ciertos escenarios porque, a diferencia de las funciones de T-SQL, las funciones .NET se crean utilizando código compilado. Las funciones definidas por el usuario también pueden devolver tipos de tablas, en cuyo caso la función debe devolver un conjunto de resultados.

Para crear una UDF con Visual Studio 2005, seleccione Nuevo | Opción Proyecto y luego seleccione la plantilla Proyecto de SQL Server como se muestra en la Figura 3-7.

Figura 3-7
Figura 3-7: Creación de un nuevo proyecto UDF de SQL Server

Como en el ejemplo del procedimiento almacenado que se presentó anteriormente, primero dé un nombre a su proyecto y haga clic en Aceptar para crear el proyecto. En el ejemplo que se muestra en la Figura 3-7, puede ver que he usado el nombre ufn_GetDateAsString para mi función definida por el usuario. Esta función devuelve un valor de cadena que contiene la fecha y hora del sistema. Después de nombrar el proyecto, haga clic en Aceptar para mostrar el cuadro de diálogo Nueva referencia de base de datos para el proyecto de la función CLR, que se parecerá al que se muestra en la Figura 3-8.

NOTA: El cuadro de diálogo Agregar referencia de base de datos se muestra en lugar del cuadro de diálogo Nueva referencia de base de datos cuando ya se ha creado una referencia de base de datos. Este sería el caso si crearas la función ufn_GetDateAsString inmediatamente después del proyecto usp_ImportFile.

Figura 3-8
Figura 3-8: El cuadro de diálogo Nueva referencia de base de datos

El cuadro de diálogo Nueva referencia de base de datos define la conexión entre su proyecto de Visual Studio y SQL Server. El proyecto se conectará al sistema SQL Server llamado sql2005 y la función se implementará en la base de datos AdventureWorks.

Una vez que se ha creado el proyecto de Visual Studio y se ha definido la conexión, utilice el proyecto | Opción de menú Agregar función para mostrar el cuadro de diálogo Agregar nuevo elemento que puede ver en la Figura 3-9.

Figura 3-9
Figura 3-9: Agregar una función CLR definida por el usuario

Visual Studio utiliza la plantilla de proyecto de función de SQL Server para crear un proyecto de inicio que incluye la referencia al proveedor de datos .NET de SQL Server y un contenedor de función básica para su código fuente. Depende de usted completar el resto del código. La siguiente lista de códigos muestra la función CLR completada, ufn_GetDateAsString, que realiza una conversión básica de fecha a cadena:

Imports System
Imports System.Data
Imports System.Data.Sql
Imports System.Data.SqlTypes
Imports Microsoft.SqlServer.Server

Partial Public Class UserDefinedFunctions
     
 
   _
     Public Shared Function ufn_GetDateAsString() As SqlString
          Dim dtDataTime As New DateTime
     Return dtDataTime.ToString()
End Function
 ()>

Aquí, el espacio de nombres Microsoft.SqlServer.Server no es necesario, ya que esta función en particular no realiza ningún acceso a los datos. A continuación, Visual Studio 2005 generó la clase UserDefinedFunctions para contener todos los métodos que este ensamblado expondrá como UDF. También puede ver que el

El atributo se utiliza para identificar el método ufn_GetDateAsString como una UDF. El código de este ejemplo simple simplemente convierte la fecha del sistema en un tipo de datos de cadena que se devuelve a la persona que llama.
()>

Implementar la función

Para crear la función en una base de datos de SQL Server, primero se debe crear el ensamblado, como vio en el ejemplo del procedimiento almacenado. Luego, si está utilizando Visual Studio 2005, simplemente seleccione la opción Compilar | Implemente la opción de solución y listo.

Si está haciendo esto manualmente, deberá copiar el archivo ufn_GetDataAsString.dll a una ubicación a la que pueda acceder el sistema SQL Server y luego crear el ensamblado, seguido de la función. La siguiente instrucción CREATE ASSEMBLY se puede utilizar para copiar el contenido de ufn_GetDateAsString.dll en la base de datos de SQL Server:

CREATE ASSEMBLY ufn_GetDataAsString
FROM 'MyFileShareCode Libraryufn_GetDataAsString.dll'

Luego, la instrucción CREATE FUNCTION se usa para crear una nueva función de SQL Server que ejecuta el método apropiado en el ensamblado. La siguiente lista ilustra cómo la instrucción CREATE FUNCTION puede crear una función definida por el usuario .CLR:

CREATE FUNCTION ufn_GetDateAsString()
RETURNS nvarchar(256)
EXTERNAL NAME
ufn_GetDateAsString.UserDefinedFunctions.ufn_GetDateAsString

Para las funciones definidas por el usuario, la instrucción CREATE FUNCTION se ha ampliado con la cláusula EXTERNAL NAME, que esencialmente vincula el nombre de la función definida por el usuario al método apropiado en el ensamblado .NET. En este ejemplo, la función ufn_GetDateAsString usa el ensamblado llamado ufn_GetDateAsString. Dentro de ese ensamblado, está usando la clase UserDefinedFunctions y el método ufn_GetDateAsString dentro de esa clase.

Usando la función

Una vez creada la función, se puede llamar como una función normal de SQL Server. Puede ver cómo ejecutar la función GetDateAsString en el siguiente ejemplo:

SELECT dbo.GetDateAsString()
End Class

El consejo anterior es de «Desarrollo de objetos de base de datos CLR: 10 consejos en 10 minutos», extraído del capítulo 3 del libro «Microsoft SQL Server 2005: Guía del desarrollador» escrito por Michael Otey y Denielle Otey, cortesía de McGraw-Hill Publishing.


Desarrollar objetos de base de datos CLR


Inicio: Introducción

Consejo 1: arquitectura CLR

Consejo 2: ensamblados CLR en SQL Server 2005

Consejo 3: creación de objetos de base de datos CLR

Consejo 4: procedimientos almacenados de CLR

Consejo 5:
Funciones definidas por el usuario

Consejo 6: disparadores CLR

Consejo 7: tipos definidos por el usuario

Consejo 8: agregados CLR

Consejo 9: depurar objetos de base de datos CLR

Consejo 10: seguridad del objeto de la base de datos .NET

Deja un comentario

También te puede interesar...

Definición de Cámara de Compensación Automatizada (ACH).

¿Qué es la Cámara de Compensación Automatizada (ACH)? La Red de Cámaras de Compensación Automatizadas (ACH) es un sistema de transferencia electrónica de fondos administrado por la antigua Asociación Nacional de Cámaras de Compensación Automatizadas

definicion de jaula

¿Qué es una jaula? En finanzas, «jaula» es un término coloquial que se usa para describir el departamento de una firma de corretaje que se encarga de recibir y distribuir certificados físicos de acciones y

Optus robó el grupo de productos Telstra

La empresa de productos frescos de Costa Group renunció a Telstra por Optus, adjudicando a la segunda empresa de telecomunicaciones más grande de Australia un contrato de 6 millones de dólares para proporcionar servicios de

Noticias para saber: Google Docs ahora; Windows 7

Títulos notables: Documentos de Google apoyo PowerPoint presentaciones próximamente. Google prepara «En la actualidad». della para reducir bonificaciones, gestión de recortes. Gootube Aterroriza a los propietarios de los derechos de autor reteniendo filtros. VMware requiere

Requisitos de listado

¿Cuáles son los requisitos de cotización? Los requisitos de cotización incluyen los diversos criterios y estándares mínimos establecidos por las bolsas de valores, como la Bolsa de Valores de Nueva York, para permitirle unirse a

Lo que Master Data Management puede ganar con SOA

IBM acaba de lanzar un producto, Servidor IBM InfoSphere Master Data Management (MDM), que se supone que interactúa con la arquitectura orientada a servicios. Según IBM, InfoSphere «proporciona opciones de implementación que brindan a los

Transforma WordPress en un WYSIWYG con MotoPress

Transforma WordPress en un WYSIWYG con MotoPress Si trabaja con sitios de WordPress, entonces sabe lo frustrante que puede ser el editor integrado. Ya sea un marcado superfluo, CSS desactualizado o su hábito de truncar

¿Qué es ECMA y por qué le importa a Microsoft?

A primera vista, la ironía es inevitable. Por un lado, está Microsoft, el loco gigante del software —algunos dirían que intimidante—; por otro lado, existe una organización de establecimiento de estándares de 40 años con

Cómo hacer emojis en iPhone

Los emojis predeterminados del teclado IOS no representan mejor sus frecuentes cambios de humor, y ¿quiere poder crear emoticonos personalizados que expresen una gama más compleja de emociones? En este caso, si necesita asesoramiento sobre

El mod del año 2012: DayZ

Si XCOM nos recordó el valor de la pérdida en 2012, DayZ fue una valiosa lección sobre las dificultades. El mod Arma 2 fue uno de los juegos menos indulgentes y más intimidantes del año.