pregunta anti cursor

09/12/2003 - 22:21 por Cam Acosta | Informe spam
Hola a todos, tengo una tabla mas o menos como la siguiente, y necesito
llenar el campo secuencia (que inicalmente es nulo) que es como un
autonumerico para los registros que pertenecen a un mismo docNo. Existe
alguna forma de hacerlo de forma masiva o toca recurrir a una solución del
tipo cursor...

Gracias,

Camilo Acosta



docNo Cuenta Valor Secuencia
1 123123 4000 1
1 234234 4667 2
1 123423 213423 3
2 234234 234345 1
2 234345 345434 2
3 234234 23434 1
3 233541 234234 2

create table prueba(
docNo int,
Cuenta char(10),
Valor money,
Secuencia int
)
go

INSERT INTO dbo.prueba
VALUES (1, N'123123 ', 4000, NULL)
INSERT INTO dbo.prueba
VALUES (1, N'234234 ', 4667, NULL)
INSERT INTO dbo.prueba
VALUES (1, N'123423 ', 213423, NULL)
INSERT INTO dbo.prueba
VALUES (2, N'234234 ', 234345, NULL)
INSERT INTO dbo.prueba
VALUES (2, N'234345 ', 345434, NULL)
INSERT INTO dbo.prueba
VALUES (3, N'234234 ', 23434, NULL)
INSERT INTO dbo.prueba
VALUES (3, N'23354 ', 234234, NULL)

Preguntas similare

Leer las respuestas

#1 Miguel Egea
09/12/2003 - 23:28 | Informe spam
Quizá esto sirva, aunque no es 100% seguro
asegurate de tener un indice clustered por docno antes de lanzarlo, tendrás
muchas más posibilidades de exito.

declare @id int
declare @doc int
update prueba set Secuencia=@id,@id =case when @doc=docno then @id+1 else 0
end,@doc=docno
select * from prueba


=Miguel Egea
http://www.portalsql.com
Microsoft SQL-SERVER MVP.
Brigada Anti-Cursores
Aviso de Seguridad
http://www.microsoft.com/spain/tech...9-USER.asp
==
"Cam Acosta" escribió en el mensaje
news:
Hola a todos, tengo una tabla mas o menos como la siguiente, y necesito
llenar el campo secuencia (que inicalmente es nulo) que es como un
autonumerico para los registros que pertenecen a un mismo docNo. Existe
alguna forma de hacerlo de forma masiva o toca recurrir a una solución del
tipo cursor...

Gracias,

Camilo Acosta



docNo Cuenta Valor Secuencia
1 123123 4000 1
1 234234 4667 2
1 123423 213423 3
2 234234 234345 1
2 234345 345434 2
3 234234 23434 1
3 233541 234234 2

create table prueba(
docNo int,
Cuenta char(10),
Valor money,
Secuencia int
)
go

INSERT INTO dbo.prueba
VALUES (1, N'123123 ', 4000, NULL)
INSERT INTO dbo.prueba
VALUES (1, N'234234 ', 4667, NULL)
INSERT INTO dbo.prueba
VALUES (1, N'123423 ', 213423, NULL)
INSERT INTO dbo.prueba
VALUES (2, N'234234 ', 234345, NULL)
INSERT INTO dbo.prueba
VALUES (2, N'234345 ', 345434, NULL)
INSERT INTO dbo.prueba
VALUES (3, N'234234 ', 23434, NULL)
INSERT INTO dbo.prueba
VALUES (3, N'23354 ', 234234, NULL)


Respuesta Responder a este mensaje
#2 Isaías
10/12/2003 - 01:29 | Informe spam
Hola Mike

Con tu permiso, quisiera sugerir esta solucion que algun
dia la "Super-Anti-Cursores" de Liliana Sorrentino me dio.


UPDATE prueba
SET Secuencia= (SELECT COUNT(docNo)
FROM prueba
WHERE docNo = t.docNo AND Cuenta = t.Cuenta AND Cuenta
<= t.Cuenta)
FROM prueba t

Espero funcione, no lo he probado.
Respuesta Responder a este mensaje
#3 Miguel Egea
10/12/2003 - 09:31 | Informe spam
Si, la única ventaja de la que yo propongo es que no hay subselects y
seguramente se ejecute más rápido.

Saludos
Migueel Egea
"Isaías" escribió en el mensaje
news:0ffd01c3beb4$b82d40b0$
Hola Mike

Con tu permiso, quisiera sugerir esta solucion que algun
dia la "Super-Anti-Cursores" de Liliana Sorrentino me dio.


UPDATE prueba
SET Secuencia= (SELECT COUNT(docNo)
FROM prueba
WHERE docNo = t.docNo AND Cuenta = t.Cuenta AND Cuenta
<= t.Cuenta)
FROM prueba t

Espero funcione, no lo he probado.
Respuesta Responder a este mensaje
#4 Cam Acosta
10/12/2003 - 17:04 | Informe spam
Muchas gracias a los dos,

Saludos desde Bogota, Colombia
"Miguel Egea" escribió en el mensaje
news:
Si, la única ventaja de la que yo propongo es que no hay subselects y
seguramente se ejecute más rápido.

Saludos
Migueel Egea
"Isaías" escribió en el mensaje
news:0ffd01c3beb4$b82d40b0$
> Hola Mike
>
> Con tu permiso, quisiera sugerir esta solucion que algun
> dia la "Super-Anti-Cursores" de Liliana Sorrentino me dio.
>
>
> UPDATE prueba
> SET Secuencia= (SELECT COUNT(docNo)
> FROM prueba
> WHERE docNo = t.docNo AND Cuenta = t.Cuenta AND Cuenta
> <= t.Cuenta)
> FROM prueba t
>
> Espero funcione, no lo he probado.


Respuesta Responder a este mensaje
#5 Liliana Sorrentino
16/12/2003 - 18:01 | Informe spam
¡Todavía me recuerdan por estos lares!

Después de 40 días de vacaciones hoy me reintegro a la oficina. No es
recomendable tanto tiempo, las neuronas tardan en reaccionar a la vuelta,
pero que no se entere mi jefe.

Hola amigo Isaías, pero ¿cómo es eso de que no lo probaste? ¿habrás
solucionado lo tuyo con algún cursorcito...?

Saludos a todos...

"Isaías" escribió en el mensaje
news:0ffd01c3beb4$b82d40b0$
Hola Mike

Con tu permiso, quisiera sugerir esta solucion que algun
dia la "Super-Anti-Cursores" de Liliana Sorrentino me dio.


UPDATE prueba
SET Secuencia= (SELECT COUNT(docNo)
FROM prueba
WHERE docNo = t.docNo AND Cuenta = t.Cuenta AND Cuenta
<= t.Cuenta)
FROM prueba t

Espero funcione, no lo he probado.
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida