Hacer un update en determinado orden

22/12/2005 - 06:12 por Raul | Informe spam
Necesito actualizar un campo de una tabla con un consecutivo. Lo del
consecutivo ya lo resolvi con una funcion. Ejemplo:
UPDATE TABLA1 set micampo1=dbo.FuncionConsecutivo() WHERE ...

El problema es que el consecutivo debo asignarlo segun un orden especifico
que NO es el da la clave primaria de TABLA1. Digamos debo asignarlo
basandome en el orden de tabla1.micampo2.

Seria como si el update pudiera tener un order by.

Existe alguna solucion a esto por t-sql ???

Preguntas similare

Leer las respuestas

#1 Salvador Ramos
22/12/2005 - 11:16 | Informe spam
Hola,

No entiendo bien lo que necesitas, podrías poner un ejemplo con datos y las
DDL de esa tabla ?

Un saludo
Salvador Ramos
Murcia - España

[Microsoft MVP SQL Server]
www.helpdna.net (información sobre SQL Server y .NET)


"Raul" escribió en el mensaje
news:
Necesito actualizar un campo de una tabla con un consecutivo. Lo del
consecutivo ya lo resolvi con una funcion. Ejemplo:
UPDATE TABLA1 set micampo1=dbo.FuncionConsecutivo() WHERE ...

El problema es que el consecutivo debo asignarlo segun un orden especifico
que NO es el da la clave primaria de TABLA1. Digamos debo asignarlo
basandome en el orden de tabla1.micampo2.

Seria como si el update pudiera tener un order by.

Existe alguna solucion a esto por t-sql ???





Respuesta Responder a este mensaje
#2 ulises
22/12/2005 - 15:51 | Informe spam
Tal vez este ejemplo te pueda ayudar, :

create table principal ( id int, campo2 char(10), sec_campo2 int )
go
insert into principal select 1, 'AURELIO', 0
insert into principal select 2, 'BEATRIZ', 0
insert into principal select 3, 'ARTURO', 0
insert into principal select 4, 'JOAQUIN', 0
insert into principal select 5, 'UMA', 0
insert into principal select 6, 'LINDA', 0
insert into principal select 7, 'DAVID', 0
go
update principal set sec_campo2 = x.sec
from principal join ( select count(*) as sec, a.campo2, a.sec_campo2
from principal a join principal b
on a.campo2 >= b.campo2
group by a.campo2, a.sec_campo2 ) x
on principal.campo2 = x.campo2
GO
select * from principal
GO

id campo2 sec_campo2
1 AURELIO 2
2 BEATRIZ 3
3 ARTURO 1
4 JOAQUIN 5
5 UMA 7
6 LINDA 6
7 DAVID 4

(7 row(s) affected)

Saludos,
Ulises


"Raul" wrote:

Necesito actualizar un campo de una tabla con un consecutivo. Lo del
consecutivo ya lo resolvi con una funcion. Ejemplo:
UPDATE TABLA1 set micampo1=dbo.FuncionConsecutivo() WHERE ...

El problema es que el consecutivo debo asignarlo segun un orden especifico
que NO es el da la clave primaria de TABLA1. Digamos debo asignarlo
basandome en el orden de tabla1.micampo2.

Seria como si el update pudiera tener un order by.

Existe alguna solucion a esto por t-sql ???






Respuesta Responder a este mensaje
#3 Raul
22/12/2005 - 17:00 | Informe spam
Muchas gracias amigo. Era justo la idea q buscaba para resolverlo.



"ulises" escribió en el mensaje
news:
Tal vez este ejemplo te pueda ayudar, :

create table principal ( id int, campo2 char(10), sec_campo2 int )
go
insert into principal select 1, 'AURELIO', 0
insert into principal select 2, 'BEATRIZ', 0
insert into principal select 3, 'ARTURO', 0
insert into principal select 4, 'JOAQUIN', 0
insert into principal select 5, 'UMA', 0
insert into principal select 6, 'LINDA', 0
insert into principal select 7, 'DAVID', 0
go
update principal set sec_campo2 = x.sec
from principal join ( select count(*) as sec, a.campo2, a.sec_campo2
from principal a join principal b
on a.campo2 >= b.campo2
group by a.campo2, a.sec_campo2 ) x
on principal.campo2 = x.campo2
GO
select * from principal
GO

id campo2 sec_campo2
1 AURELIO 2
2 BEATRIZ 3
3 ARTURO 1
4 JOAQUIN 5
5 UMA 7
6 LINDA 6
7 DAVID 4

(7 row(s) affected)

Saludos,
Ulises


"Raul" wrote:

Necesito actualizar un campo de una tabla con un consecutivo. Lo del
consecutivo ya lo resolvi con una funcion. Ejemplo:
UPDATE TABLA1 set micampo1=dbo.FuncionConsecutivo() WHERE ...

El problema es que el consecutivo debo asignarlo segun un orden
especifico
que NO es el da la clave primaria de TABLA1. Digamos debo asignarlo
basandome en el orden de tabla1.micampo2.

Seria como si el update pudiera tener un order by.

Existe alguna solucion a esto por t-sql ???






Respuesta Responder a este mensaje
#4 Alejandro Mesa
22/12/2005 - 19:23 | Informe spam
Raul,

Asegurate que los valores en la columna [campo2] sean unicos, de lo
contrario ese codigo no funcionara.


AMB

"Raul" wrote:


Muchas gracias amigo. Era justo la idea q buscaba para resolverlo.



"ulises" escribió en el mensaje
news:
> Tal vez este ejemplo te pueda ayudar, :
>
> create table principal ( id int, campo2 char(10), sec_campo2 int )
> go
> insert into principal select 1, 'AURELIO', 0
> insert into principal select 2, 'BEATRIZ', 0
> insert into principal select 3, 'ARTURO', 0
> insert into principal select 4, 'JOAQUIN', 0
> insert into principal select 5, 'UMA', 0
> insert into principal select 6, 'LINDA', 0
> insert into principal select 7, 'DAVID', 0
> go
> update principal set sec_campo2 = x.sec
> from principal join ( select count(*) as sec, a.campo2, a.sec_campo2
> from principal a join principal b
> on a.campo2 >= b.campo2
> group by a.campo2, a.sec_campo2 ) x
> on principal.campo2 = x.campo2
> GO
> select * from principal
> GO
>
> id campo2 sec_campo2
> 1 AURELIO 2
> 2 BEATRIZ 3
> 3 ARTURO 1
> 4 JOAQUIN 5
> 5 UMA 7
> 6 LINDA 6
> 7 DAVID 4
>
> (7 row(s) affected)
>
> Saludos,
> Ulises
>
>
> "Raul" wrote:
>
>> Necesito actualizar un campo de una tabla con un consecutivo. Lo del
>> consecutivo ya lo resolvi con una funcion. Ejemplo:
>> UPDATE TABLA1 set micampo1=dbo.FuncionConsecutivo() WHERE ...
>>
>> El problema es que el consecutivo debo asignarlo segun un orden
>> especifico
>> que NO es el da la clave primaria de TABLA1. Digamos debo asignarlo
>> basandome en el orden de tabla1.micampo2.
>>
>> Seria como si el update pudiera tener un order by.
>>
>> Existe alguna solucion a esto por t-sql ???
>>
>>
>>
>>
>>
>>



email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida