sábado, 27 de febrero de 2010

SQL SERVER – Llamar Funciones de la base de datos directamente

udfs Hasta que me lo preguntaron, me dijeron: Yo sé que las funciones definidas por el usuario (en adelante UDF) han sido creadas para encapsular funcionalidades y para que al ser llamadas desde un procedimiento almacenado (en adelante SP), simplifiquen el armado y entendimiento de las sentencias t-sql que finalmente terminan siendo los SP.
Pero, pero, pero (continuaban…):Se puede llamar una UDF directamente? osea, sin necesidad de usarla desde un SP?
La razón que argumentaban era que querían testear las funciones y se veían en la engorrosa necesidad de meterla en un SP cada vez que querían testear la función.
Mi respuesta fue: hmmm… de poder se puede, y sería así:
1.- Creen una UDF, digamos algo como esto
CREATE FUNCTION [dbo].[risk_user_GetDescription]
(@userid int)
RETURNS varchar(150)

AS
BEGIN
    RETURN
    (
    SELECT [FirstName] + ' ' + [LastName])

    FROM [dbo].[risk_user]
    WHERE [userid] = @userid
    )
END

Esta UDF es muy senclla: simplemente devuelve el nombre de un usuario, recibiendo como parámetro el ID de usuario.
2.- Ahora, cómo lo llamo directamente?
Si están en el SQL SERVER Management Studio, simplemente presionen el botón Nueva consulta y tipeen
SELECT [dbo].[risk_user_GetDescription](1)
Luego presionen F5 para que se ejecute la consulta. Verán que se originan resultados.
Si se dan cuenta, es muy simple: sólo añadí un SELECT antes del nombre de la UDF y al final simplemente le pasé el parámetro que requiere la función.
Si quisieras hacer lo mismo ( llamar una UDF directamente ) desde el Visual Studio, también se puede. Simplemente harías esto:
Dim connection As New SqlConnection("server=.\SQLEXPRESS;database=midatabase;uid=sa;pwd=")

Dim command As New SqlCommand("SELECT [dbo].[risk_user_GetDescription](1)", connection)
command.CommandType = CommandType.Text

connection.Open()
Dim NombreDeUsuario As String = DirectCast(command.ExecuteScalar(), String)
connection.Close()

Lo que hace este código es llamar a la UDF directamente, y la variable NombreDeUsuario es la que recibe el resultado.
Yo he hecho el ejemplo con una función que devuelve un string, les dejo como tarea a Uds el que traten con funciones que devuelven otros tipos de datos.
;)

No hay comentarios.: