SQL Server - NOMBRE DE COLUMNA COMO VARIABLE AYUDAAAA

 
Vista:

NOMBRE DE COLUMNA COMO VARIABLE AYUDAAAA

Publicado por daniel grillo (3 intervenciones) el 24/05/2008 05:00:50
BUENAS NOCHES AMIGOS QUIERA SU AYUA EN EL SGT PROBLEMA QUE SE ME AH PRESENTADO :
RESUTA QUE TENGO UNA TABLA LLAMADA SAL QUE TIENE 80 CAMPOS LOS CAMPOS QUE TIENE SON POR EJM SAL01,SAL02,SAL03 Y ASI MUCHOS MAS
LO QUE NO EN PODIDO HACER ES PONER EL NOMBRE DE LA COLUMNA COMO UNA VARIABLE DINAMICA ESTO MAS O MENOS

declare i int
while i<81
begin
SET @VARIABLE=COL_NAME(OBJECT_ID('Employees'), i)

UPDATE SAL SET @VARIABLE=@VALOREENTERO WHERE CONDICION1=@CONDICION1 AND CONDICION2=@CONDICION2 AND CONDICION3=@CONDICION3 AND CONDICION4=@CONDICION4

ESO ESTA QUE ME ROMPE LA CABEZA.

SI UBIERA ALGUN MODO DE SIMPLIFICAR EL CODIGO DE ESA MANERA Y NO USAR MUCHOS IF

set i=i+1
end

se que valtan declarar algunas variables mas pero esa es la idea gracias cpor su ayuda
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:NOMBRE DE COLUMNA COMO VARIABLE AYUDAAAA

Publicado por Isaias (3308 intervenciones) el 26/05/2008 19:39:02
Deberias pensar en utlizar QUERY DINAMICO, con sus respectivos pros y contras.

Ademas de rediseñar la tabla, ¿tantas columnas es justificable?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:NOMBRE DE COLUMNA COMO VARIABLE AYUDAAAA

Publicado por daniel grillo (3 intervenciones) el 26/05/2008 19:45:20
si por mi fuera la rediseñaria la maldita tabla pero lamentablemnte no soy el jefe , mas bien si me podrias ayudar con eso de query dinamico si me pudieras dar un ejempo con el update
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:NOMBRE DE COLUMNA COMO VARIABLE AYUDAAAA

Publicado por Isaias (3308 intervenciones) el 26/05/2008 21:17:18
Te mando un ejemplo de query dinamico.

DECLARE @TABLA SYSNAME
DECLARE @SQLString NVARCHAR(1000)
SET @TABLA = 'CLIENTE'
SET @SQLString = N'SELECT * FROM '+@TABLA+' WHERE IDCLIENTE = 100'
EXEC sp_executesql @SQLString
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:NOMBRE DE COLUMNA COMO VARIABLE AYUDAAAA

Publicado por Carlos Reyes (4 intervenciones) el 30/05/2008 01:04:55
Hola, no se si sea lo que pretendes,

Si solo deseas generar un query dinamico asi es un ejemplo

---------------------------------------------------------------------------------------------------------
USE Northwind
GO

DECLARE @col1 VARCHAR(15),@col2 VARCHAR(15),@col3 VARCHAR(15)
SET @col1='OrderID'
SET @col2='CustomerID'
SET @col3='EmployeeID'
EXEC('SELECT '+@col2+', '+@col3+ ' from Orders where '+@col1+' > 10200 ')
---------------------------------------------------------------------------------------------------------

Si deseas obtener todas y cada una de las columnas de tu tabla requieres hacer uso del sysobjects de Master y que de de los nombres de las columnas de dicha tabla, asi obtendrias las columnas que tiene tu tabla.

te anexo un ejemplo:

---------------------------------------------------------------------------------------------------------
SELECT syscolumns.name
FROM sysobjects
LEFT OUTER JOIN syscolumns on sysobjects.id = syscolumns.id
WHERE sysobjects.xtype = 'U'
AND sysobjects.name = @tabla
ORDER BY syscolumns.name
---------------------------------------------------------------------------------------------------------

*@tabla = el nombre de tu tabla
*@Columna = el nombre de tu columna
-Si quisieras filtrar po algun patron de columnas añadirias al where esta clausula
con lo que obtendrias las columnas de nombres similares
" AND syscolumns.name LIKE @columna + '%' "

Espero que te sirva

Saludos!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:NOMBRE DE COLUMNA COMO VARIABLE AYUDAAAA

Publicado por daniel grillo (3 intervenciones) el 30/05/2008 04:12:34
gracias esta muy bien tu ejemplo mm si no es mucho pedir me podrias mandar un ejempo con el update no me sale asi mas o menos
update sal set sal01=45 where año=@ano and mes =@mes and dia=@dia and cia=cia and codigo=@codigo

donde todos los que tienen la arrova son parametros de un store
gracias
saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:NOMBRE DE COLUMNA COMO VARIABLE AYUDAAAA

Publicado por Carlos Reyes (49 intervenciones) el 31/05/2008 00:51:49
Hay te va:

------------------------------------------------------------------------------------------------
USE Northwind
GO

DECLARE @var VARCHAR(2000)
DECLARE @Tabla VARCHAR(100)
DECLARE @val VARCHAR(5)

SET @Tabla = 'Invoices'
SET @var = 'UPDATE ' + @Tabla + ' SET '
SET @val = '1'

SELECT @var = @var + CONVERT(VARCHAR,syscolumns.name) + '= '+@val+',' + Char(13)
FROM sysobjects
LEFT OUTER JOIN syscolumns on sysobjects.id = syscolumns.id
WHERE Sysobjects.name = @Tabla
--WHERE sysobjects.xtype = 'U'
ORDER BY syscolumns.name

SET @var = LEFT(@var,LEN(@var)-2) + Char(13) + 'WHERE City = ''Reims'' and Country = ''France'''

PRINT @var

------------------------------------------------------------------------------------------------
De esta manera te queda tu query dinamico y basta con que hagas un EXEC(@VAR)

Asi como consultas al Sysobjects para obtener las columnas de tu tabla has la consulta para que te traiga los parametros del Store y los incluyes de la misma forma y dinamicamente a tu query.

Por otro lado, lo unico que tendrias que cambiar de la consulta al sys objects es la parte de
WHERE sysobjects.xtype = 'U' por WHERE sysobjects.xtype = 'P' osea de Procedimiento almacenado

No recuerdo bien que tabla unes para sacar los parametros del store, lo checo y te lo mando. Mientras buscate como se hace esto.

Saludos!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:NOMBRE DE COLUMNA COMO VARIABLE AYUDAAAA

Publicado por Carlos Reyes (49 intervenciones) el 02/06/2008 21:38:16
Te paso el script, ya solo adecualo a tus necesidades.

------------------------------------------------------------------------------------------------------------
/*Con este metodo obtienes los parametros de un SP, asi como los nombres de las
columnas de la tabla que deseas actualizar y generando asi un query dinamico para dicho proposito
NOTA:
1) En el segundo cursor debes poner un filtro para las columnas que deseas incluir
en la actualizacion, esto por que si por decir tus parametros del Stored solo pretenden
actualizar 3 columnas, pues esos parametros deben corresponder a las columnas que deseas
actualizar, algo asi: "AND Sysobjects.name IN('columna1','columna2','columna3')"
2) Cambia la ultima instruccion "PRINT @var" por "EXEC(@var)"
3) Adecualo a tus necesidades, JEJE*/

USE Northwind
GO

DECLARE @parName VARCHAR(50)
DECLARE @sProc VARCHAR(50)
DECLARE @var VARCHAR(2000)
DECLARE @Tabla VARCHAR(100)
DECLARE @val VARCHAR(5)
DECLARE @colName VARCHAR(50)
SET @sProc = 'Sales by Year'
SET @Tabla = 'Invoices'
SET @var = '''UPDATE ' + @Tabla + ' SET '
SET @val = '1'

--Primer cursor para los parametros de Stored
DECLARE insPar CURSOR FOR
--Consulto los parametros del Stored 1 a 1
SELECT syscolumns.name
FROM sysobjects
LEFT OUTER JOIN syscolumns on sysobjects.id = syscolumns.id
WHERE sysobjects.xtype = 'P'
AND sysobjects.name = @sProc
ORDER BY syscolumns.name

--Abro el cursor de parametros
OPEN insPar

--Obtengo el primer registro
FETCH NEXT FROM insPar INTO @parName

--Continua mientras se obtengan registros(parametros)
WHILE @@FETCH_STATUS = 0
BEGIN
--Creo un cursor para obtener las columnas que quiero actualizar de mi tabla
DECLARE curCol CURSOR FOR
--Obtengo las columnas 1 a 1
SELECT syscolumns.name
FROM sysobjects
LEFT OUTER JOIN syscolumns on sysobjects.id = syscolumns.id
WHERE Sysobjects.name = @Tabla
--AND sysobjects.xtype = 'U'
ORDER BY syscolumns.name
--Abro mi cursor de columnas
OPEN curCol
--Obtengo el primer registro
FETCH NEXT FROM curCol INTO @colName

--Continua mientras se obtengan registros(columnas)
WHILE @@FETCH_STATUS = 0
BEGIN
--Aqui armo mi query dinamico
SELECT @var = @var + @colName + '= ''''''+'+@parName+'+'''''',' + Char(13)
--Obtengo la siguiente columna
FETCH NEXT FROM curCol INTO @colName
--Obtengo el siguiente parametro
FETCH NEXT FROM insPar INTO @parName
END
--Libero el cursor una ver obtenidos los registros
CLOSE curCol
DEALLOCATE curCol
END

--Libero el cursor una ver obtenidos los registros
CLOSE insPar
DEALLOCATE insPar
--Anexo los filtros del update a mi query
SET @var = LEFT(@var,LEN(@var)-2) + Char(13) + 'WHERE City = ''''Reims'''' and Country = ''''France'''''''
--Ejecuto mi query dinamico
PRINT @var

------------------------------------------------------------------------------------------------------------

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar