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"

Como reparar una DB SQL

En muchas ocasiones nuestra base de datos en sqlserver 2000 se puede dañar por fallas debido a que nuestro servidor se reinicia de manera inesperada o la memoria RAM o el disco duro tienen algunos problemas. Esto origina que en la base de datos se corrompan algunos objetos como tablas o índices. Cuando tratamos de seleccionar registros en nuestra tabla nos da un error grave del ( DBPROCESS is dead, Error Severities) Aquí es donde inicia nuestro problema, no podemos acceder a los registros de la tabla; la razón puede ser según el nivel de severidad del error, estos niveles están categorizados así: EXINFO 1 Informational, nonerror. EXUSER 2 User error. EXNONFATAL 3 Nonfatal error. EXCONVERSION 4 Error in DB-Library data conversion. 5 The server has returned an error flag. EXTIME 6 Time-out period exceeded while waiting for a response from the server; the DBPROCESS is still alive. EXPROGRAM 7 Coding error in user program. EXRESOURCE 8 Running out of resources; the DBPROCESS ma