Ir al contenido principal

CREANDO TUS PROPIAS FUNCIONES EN SQLSERVER 2005

Años atrás, le veía muy poca utilidad a la creación de funciones propias en SQLSERVER. Realmente me estaba perdiendo de una gran utilidad en la programación. El uso de funciones hoy en día me ha facilitado la programación de consultas a la base de datos que podrían ser querys complejos. Con las funciones se vuelve muy sencillo hacer una consulta, son fáciles de utilizar y la mayor ventaja radica en que son reutilizables en otros procedimientos almacenados y/o triggers.
Como ejemplo, veamos la siguiente consulta.

SELECT A.COD_TIPP, C.COD_CLIEN COD_CLIENTE,C.RAZSOC NOMBRECLIENTE,A.COD_PROD,
A.DESCRIPCION,A.STATUS,
B.CATEGORIA ABC,B.CATEGORIAHIT ABCHIT,
B.CATEGORIABCVALOR ABCVALOR,
dbo.BUSCAR_CICLOS_PROM(A.COD_PROD) CICLOS,
dbo.BUSCAR_PESO_PRODUCTO(A.COD_PROD) PESOGRS,
(dbo.BUSCAR_PESO_PRODUCTO(A.COD_PROD)* dbo.BUSCAR_PRECIO_MAT_PRIMA_PROFEC(A.COD_PROD,getdate()))/.97 COSTOMILLMATPRIMA,
dbo.BUSCAR_PESO_PRODUCTO(A.COD_PROD)* @COSTO_KG_DERRGASTOS COSTOMILLGASTOS,
dbo.INV_EXT_BUSCARPRECIO_PROMMAY3MSALA(A.COD_PROD,GETDATE())*1000 PRECIOSALA,dbo.BUSCAR_TIEMPO_PROD_PRODUC(A.COD_PROD)
FROM PRODUCTO A ,INVENTARIO B, CLIENTE C,PRECIOS_VARIABLES D
WHERE A.STATUS NOT IN('D','I') AND A.COD_PROD=B.COD_PROD AND B.COD_EMPRE='01' AND B.COD_SUC=@COD_SUC AND B.COD_UBI='01'
AND A.COD_PROD=D.COD_PROD AND C.COD_CLIEN=D.COD_CLIENTE

------- una de las funciones utilizada en la consulta anterior
create FUNCTION [dbo].[INV_EXT_BUSCARPRECIO_PROMMAY3MSALA] (@cod_prod char(50),@FECHA_INICIO datetime)
RETURNS numeric(18,6)
AS
BEGIN
---- funcion que devuelve el precio promedio de las ventas de un producto
declare @precio numeric(18,6)
SELECT @PRECIO=ISNULL(AVG(B.VALUNI),0) FROM ENCDOCVENTA A, DETADV B
WHERE A.COD_SUC='02' AND A.NO_DOCVENTA=B.NO_DOCVENTA AND A.TIP_DV=B.TIP_DV AND
A.COD_EMPRE=B.COD_EMPRE AND A.COD_SUC=B.COD_SUC AND A.COD_UBI=B.COD_UBI
AND A.FEC_DOCVENTA>=dateadd(MM,-3,@FECHA_INICIO) AND B.COD_PROD=@COD_PROD AND B.VALUNI>0
IF @PRECIO =0
BEGIN
select @precio = isnull(preciostd,0) from PRODUCTO where COD_PROD=@COD_PROD
END
return isnull(@precio,0)
END

Gracias al uso de las funciones esta consulta tiene un nivel simple de abstracción, imagine como sería la consulta si no utilizara funciones. Hoy en día mi base de datos cuenta con más de 200 funciones propias, las cuales me facilitan hacer una consulta de manera efectiva y eficiente, sin redundar en el código ahorrando mucho tiempo en la programación, el cual es uno de los recursos más importantes para un desarrollador de sistemas . ¡ Tiempo ¡!!!!!!!!!

Por favor visita www.rapiconta.com para mas detalles

Comentarios

Entradas populares de este blog

GUARDAR DOCUMENTOS PDF EN LA BASE DE DATOS SQLSERVER DESDE .NET

Personalmente quiero contarles que para mi este proceso ha sido muy escabroso,he dedicado muchas horas de investigacion para encontrar la forma de hacerlos lo más sencillo posible. Anteriormente había guardado imagenes en la base de datos utilizando compos de tipo imagen, pero luego revisando la documentacion de sqlserver 2005 encontre que en el futuro este tipo de campo podría ser descartado, esto me llevo a buscar otras alternativas especialmente con los campos binarios o (varbinary(max)) . PASOS: 1.- Primero declare las siguientes variables de clase en su formulario windows form Dim fdlg As New OpenFileDialog Dim fs As System.IO.FileStream Dim mcorr_documento As Int32 Dim bw As System.IO.BinaryWriter ----- fin de las variables de clase 2.- Seguidamente en su formulario pegue un objeto de tipo OpenFileDialog que le servira para buscar el archivo que desea almacenar en la base de datos 3.- Cree un objeto de tipo Combo y agregue una lista de los tipos de archivos q...

Como guardar un PDF en un campo de una tabla en SQL SERVER utilizando PowerBuilder

1.- Crea un campo de tipo image en la tabla donde deseas guardar tu archivo. 2.- Luego lees el archivo pdf del path donde se encuentre 3.- Seguidamente actualizas el contenido leido en el campo de la tabla Supongamos que tenemos una tabla que se llama prueba y utiliza una llave unica sobre el campo tmp_llave. El campo campo image se llama tmp_archivo. // Declaramos nuetros campos de tipo blog blob lbl_data blob lbl_temp long ll_file, ll_long = 0, ll_tam integer li_pos = 1 // leemos el archivo ll_file = FileOpen("c:\temp\prueba.pdf",streammode!) // barremos sus registros Do While FileRead(ll_file,lbl_temp) > 0 lbl_data += lbl_temp Loop // cerramos el archivo FileClose(ll_file) // actualizamos nuestra base de datos UPDATEBLOB prueba SET prueba.tmp_archivo = :lbl_data WHERE prueba.tmp_llave = :li_llave; // Para recuperar y mostrar el archivo: SELECTBLOB tmp_archivo INTO :lbl_data FROM prueba WHERE prueba.tmp_llave = :li_llave; ll_file FileOpen("c:\temp\prueba2.pdf"...

Software control de citas de pacientes

Esta aplicación esta diseñada para el registro de citas de pacientes, es ideal para clinicas médicas y hospitales. Posee in interfaz muy facil de utilizar.