Hacer update con condición dinámica

22/06/2007 - 19:49 por ghazarian.martin | Informe spam
tengo una tabla con varios campos, a la cual le quiero hacer un update

pero este update lo que tiene que hacer es cambiar los campos que
tengan el valor '1' por el valor '0'

por ej:
la tabla tiene los campos:

Campo1 ='1'
Campo2 ='2'
Campo3 ='2'
Campo4 ='1'

entonces en este caso campo1 y campo4 serían cambiados a 0
agradezco cualquier ayuda

Martín

Preguntas similare

Leer las respuestas

#1 jcac
22/06/2007 - 20:00 | Informe spam
espero te sirva

create table #tmp(campo0 int, campo1 varchar(1), campo2 varchar(1), campo3
varchar(1))
go
insert into #tmp values (1, '1', '2', '1')
insert into #tmp values (2, '2', '2', '1')
insert into #tmp values (3, '1', '1', '1')
insert into #tmp values (4, '1', '2', '2')
insert into #tmp values (5, '2', '2', '2')
insert into #tmp values (6, '2', '1', '1')
insert into #tmp values (7, '2', '1', '2')
go
select * from #tmp
go
update #tmp
set campo1 = case campo1 when '1' then '0' else campo1 end,
campo2 = case campo2 when '1' then '0' else campo2 end,
campo3 = case campo3 when '1' then '0' else campo3 end
go
drop table #tmp
go

saludos

"" escribió en el
mensaje news:
tengo una tabla con varios campos, a la cual le quiero hacer un update

pero este update lo que tiene que hacer es cambiar los campos que
tengan el valor '1' por el valor '0'

por ej:
la tabla tiene los campos:

Campo1 ='1'
Campo2 ='2'
Campo3 ='2'
Campo4 ='1'

entonces en este caso campo1 y campo4 serían cambiados a 0
agradezco cualquier ayuda

Martín
Respuesta Responder a este mensaje
#2 ghazarian.martin
22/06/2007 - 20:30 | Informe spam
es válido y te agradezco, el tema es que en la tabla tengo 65 campos,
y tengo que ver en todos
también podría hacer algo como:

IF campo1 = '1' then update campo1
IF campo2 = '1' then update campo2
IF campo3 = '1' then update campo3
..
..
..
..
pero quiero algo como esto:

update VARIABLE = '1' where VARIABLE = 1 and VARIABLE in CAMPOS

se entiende??
sólo quiero saber sino, como se llama CAMPOS o si puedo definir una
variable para decir que pertenece a los campos de la tabla
.
Respuesta Responder a este mensaje
#3 John J. Bocachica V.
22/06/2007 - 22:29 | Informe spam
Hola, este te puede ser util

Colocalo en SP y lo puedes hacer aun mas dinamico :)

Select
1 as Campo01,
2 as Campo02,
3 as Campo03,
4 as Campo04,
5 as Campo05,
6 as Campo06,
7 as Campo07,
1 as Campo08,
2 as Campo09,
3 as Campo10,
4 as Campo11,
5 as Campo12,
6 as Campo13,
7 as Campo14,
1 as Campo15,
2 as Campo16,
3 as Campo17,
4 as Campo18,
5 as Campo19,
6 as Campo20,
7 as Campo21
Into TablaPrueba

Select * from TablaPrueba

Declare @Columna varchar(100), @TSQL nvarchar(1000), @ValorInicial
Varchar(10), @ValorFinal varchar(10)

Set @ValorInicial = 1
Set @ValorFinal = 0

Declare Update_Dyn cursor for
Select [name] From sys.Columns
Where [Object_id] = Object_id('TablaPrueba')

Open Update_Dyn

Fetch Next from Update_Dyn
into @Columna

While @@Fetch_status = 0
Begin
set @TSQL = N'Update TablaPrueba Set ' + @Columna + ' = ' + @ValorFinal +
' Where ' + @Columna + ' = ' + @ValorInicial
Print @TSQL
Exec sp_executesql @TSQL
Fetch Next from Update_Dyn
into @Columna
End

Close Update_Dyn
Deallocate Update_Dyn

John J Bocachica
SQL Server MVP
www.iquos-bi.com



"" wrote in message
news:
es válido y te agradezco, el tema es que en la tabla tengo 65 campos,
y tengo que ver en todos
también podría hacer algo como:

IF campo1 = '1' then update campo1
IF campo2 = '1' then update campo2
IF campo3 = '1' then update campo3
..
..
..
..
pero quiero algo como esto:

update VARIABLE = '1' where VARIABLE = 1 and VARIABLE in CAMPOS

se entiende??
sólo quiero saber sino, como se llama CAMPOS o si puedo definir una
variable para decir que pertenece a los campos de la tabla
.
Respuesta Responder a este mensaje
#4 jcac
22/06/2007 - 22:31 | Informe spam
sei deseas hacer esto "update VARIABLE = '1' where VARIABLE = 1 and VARIABLE
in CAMPOS", seria mas o menos así:

declare @sql varchar(3000)
declare @variable varchar(100)
set sql = 'update ' + variable + '='''1''' where ' + variable + ' = 1 and '
+ variaable + ' in (' + <CAMPOS> + ')'
print sql
exec sql

esto no lo he probado, pero ya supongo que te podrias dar una idea de como
lo puedes hacer.

Espero que te ayude.

Saludos




Para la parte de "CAMPOS" la puedes hacer asi con una funcion:

Create Function Lista_a_Tabla -- Select * From Lista_a_Tabla (' 002, 003,
004, 005,006', ',')
(@Lista Varchar(8000), @Separador nchar(1) = ',')
Returns @Tabla TABLE (Campo nvarchar(2000))
As
Begin
Declare @Ancho int, @PuntoCorte Int
Set @Ancho = Len(@Lista)
While @Ancho <> 0
Begin
Select @PuntoCorte = Charindex(@Separador, @Lista)
If @PuntoCorte > 0
Begin
Insert Into @Tabla(Campo) Values (dbo.Alltrim(Substring(@Lista, 1,
@PuntoCorte - 1)))
Select @Lista = dbo.Alltrim(Right(@Lista, @Ancho - @PuntoCorte)), @Ancho
= Len(@Lista)
/*Set @Lista = Right(@Lista, @Ancho - @PuntoCorte)
Set @Ancho = Len(@Lista)*/
End
Else
Begin
Insert Into @Tabla(Campo) Values (@Lista)
Set @Ancho = 0
End
End
Return
End

Esta te devolvera la lista de campos como una tabla la cual la podras
utilizar sin problemas en el "IN"




"" escribió en el
mensaje news:
es válido y te agradezco, el tema es que en la tabla tengo 65 campos,
y tengo que ver en todos
también podría hacer algo como:

IF campo1 = '1' then update campo1
IF campo2 = '1' then update campo2
IF campo3 = '1' then update campo3
..
..
..
..
pero quiero algo como esto:

update VARIABLE = '1' where VARIABLE = 1 and VARIABLE in CAMPOS

se entiende??
sólo quiero saber sino, como se llama CAMPOS o si puedo definir una
variable para decir que pertenece a los campos de la tabla
.
Respuesta Responder a este mensaje
#5 ghazarian.martin
25/06/2007 - 12:45 | Informe spam
ok, agradezco las respuestas...terminé implementandolo con un cursor,
como decía alguien por ahí

Pero en si en mi pregunta había muchas dudas interesantes...que no
tuve tiempo de investigar...cuento algunas:

1- si se puede definir una varibale, de tipo "campos de la tabla", es
decir como dije más arriba:
declare Variable "Campos"

existe el tipo "Campos" ??, con esto quiero decir, que parado en un
sólo registro tengo una variable con todos los campos para poder
moverme con ella
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida