viernes, 2 de julio de 2010

Realizar una búsqueda en una tabla por cada una de sus columnas en SQL Server

viernes, 2 de julio de 2010

En nuestro formulario de vb.net tenemos la idea de mostrar en una lista o en un grid los resultados de una búsqueda específica de los registros de una tabla y para ello tendríamos que filtrar las palabras clave según el tipo de columnas que estas contienen.

Esto podría ser de mucha utilidad para aquellos que utilizan una o pocas tablas en SQL Server para localizar los registros deseados y también para aquellos que quieren mostrar los resultados haciendo uso de un solo criterio y no complicarse con un sinfín de controles específicos para cada palabra o dato clave.

Todo esto se resume en realizar un procedimiento almacenado en SQL Server en la que ¡OJO! solo se pondrá como ejemplo el procedimiento en el cual se almacenarían los datos del nombre y el alias de las columnas asignadas en las tablas o consultas donde se realizará la búsqueda de los registros, y esta obvio que aparte ya tendras un procedimiento o vista en la cual consultaras los registros.

Codigo en SQL Server:

CREATE PROCEDURE SP_COLUMNAS_TABLA
@TABLA VARCHAR(20)
AS
BEGIN
--CREAMOS UNA TABLA TEMPORAL EN LA CUAL ALMACENAREMOS LOS NOMBRES DE LAS COLUMNAS Y SU ALIAS POR CADA TABLA ELEJIDA
DECLARE @TABLA_COLUMNAS TABLE(COLUMNA varchar(50), DESCRIPCION varchar(50))
SET NOCOUNT ON
DECLARE @COLUMNA AS VARCHAR(50)
DECLARE @ARRAY_COL AS NVARCHAR(500)
DECLARE @DESCRIPCION AS VARCHAR(50)
DECLARE @ARRAY_DES AS NVARCHAR(500)
IF @TABLA='PERSONAS' BEGIN
SET @ARRAY_COL='COD_PERSONA,NOMBRE,FECHA_NACIMIENTO,' --NOMBRE DE LAS COLUMNAS EN LA TABLA1 QUE DESEAMOS FILTRAR EN LA BUSQUEDA, OVIAMENTE ESTA TABLA PODRIA TENER MAS COLUMNAS, SOLO SELECCIONAMOS LAS QUE QUEREMOS MOSTRAR
SET @ARRAY_DES='CODIGO,NOMBRE,FECHA DE NAC,' --ALIAS DE LAS COLUMNAS EN ORDEN CORRESPONDIENTE AL NOMBRE, DE ESTA FORMA SE DESCRIBIRAN AL MOMENTO DE MOSTRARLOS EN UN CONTROL DEL FORMULARIO
END
IF @TABLA='CIUDADES' BEGIN
SET @ARRAY_COL='COD_CIUDAD,NOMBRE,'
SET @ARRAY_DES='CODIGO,NOMBRE,'
END
--puedes elejir mas tablas incluso columnas de una consulta


IF @TABLA='CIUDAD_PERSONAS' BEGIN
SET @ARRAY_COL='CIUDADES.NOMBRE,PERSONAS.NOMBRE,'
SET @ARRAY_DES='CIUDAD,PERSONA,'
END

WHILE LEN(@ARRAY_COL)<>0
BEGIN
SET @COLUMNA =SUBSTRING(@ARRAY_COL,0, CHARINDEX(',',@ARRAY_COL))
SET @ARRAY_COL =SUBSTRING(@ARRAY_COL,CHARINDEX(',',@ARRAY_COL,0)+1,LEN(@ARRAY_COL))
SET @DESCRIPCION =SUBSTRING(@ARRAY_DES,0, CHARINDEX(',',@ARRAY_DES))
SET @ARRAY_DES =SUBSTRING(@ARRAY_DES,CHARINDEX(',',@ARRAY_DES,0)+1,LEN(@ARRAY_DES))
INSERT INTO @TABLA VALUES(@COLUMNA, @DESCRIPCION)
END
SELECT * FROM @TABLA_COLUMNAS
END

Pero si tu eres de lo que no quiere complicarse aun mas con este código, y quieres de un porraso todas las columnas de una tabla y que el usuario elija de todas que campo filtrar en la busqueda pues te recomiendo usar este codigo en SQL Server:

Select name from syscolumns where id=object_id('Nombre_Tabla')


Bueno esta claro que acá no pondré el código en vb.net para invocar este procedimiento y efectuar la secuencia de la búsqueda, eso queda a criterio de cada programador, aca solo les di una idea de como podrían solucionarlo de forma práctica la búsqueda en una tabla o consulta específica. El filtro de búsqueda mas o menos quedaría de esta forma:



Post relacionados :

Buscar

 
Copyright © 2009 .Net Solucion