update

02/08/2005 - 22:00 por vezat | Informe spam
hola mi problema es el siguiente update demora muchisimo
la tabla t_personas tiene 70000 registros, aa_escolaridades tiene unos 25000
y aparte esta indexada por el campo persona, las estructuras de cada una son
las siguientes
debe haber alguna manera de escribirlo de manera que funcione mejor.

CREATE TABLE [dbo].[aa_escolaridades] (
[idtitulo] [binary] (10) NOT NULL ,
[description] [varchar] (60) COLLATE Modern_Spanish_CI_AS NULL ,
[idnivel] [binary] (10) NOT NULL ,
[code] [char] (6) COLLATE Modern_Spanish_CI_AS NOT NULL ,
[idcertificado] [binary] (10) NOT NULL ,
[persona] [binary] (10) NULL
) ON [PRIMARY]
GO

CREATE TABLE [dbo].[t_personas] (
[OBJECTID] [binary] (10) NOT NULL ,
[OLMARK] [int] NOT NULL ,
[ESTADO_CIVIL] [char] (6) COLLATE Modern_Spanish_CI_AS NULL ,
[LOCALIDAD_NAC] [binary] (10) NULL ,
[GRPFAC_SANG] [char] (6) COLLATE Modern_Spanish_CI_AS NULL ,
[NRO_CE] [char] (10) COLLATE Modern_Spanish_CI_AS NULL ,
[NIV_ESC_COMP] [binary] (10) NULL ,
[NIV_ESC_CURSA] [binary] (10) NULL ,
[PROVINCIA_CI] [binary] (10) NULL ,
[EMAIL] [varchar] (60) COLLATE Modern_Spanish_CI_AS NULL ,
[APELLIDO] [varchar] (40) COLLATE Modern_Spanish_CI_AS NULL ,
[CUIT_CUIL] [char] (15) COLLATE Modern_Spanish_CI_AS NULL ,
[ES_DISCAPACITADO] [char] (1) COLLATE Modern_Spanish_CI_AS NULL ,
[ES_ZURDO] [char] (1) COLLATE Modern_Spanish_CI_AS NULL ,
[FECHA_NACIMIENTO] [datetime] NULL ,
[NOMBRE] [varchar] (40) COLLATE Modern_Spanish_CI_AS NULL ,
[NRO_CI] [char] (10) COLLATE Modern_Spanish_CI_AS NULL ,
[NRO_DOCUMENTO] [char] (10) COLLATE Modern_Spanish_CI_AS NULL ,
[NRO_PASAPORTE] [char] (10) COLLATE Modern_Spanish_CI_AS NULL ,
[PAIS_NAC] [binary] (10) NULL ,
[PAIS_NACIONALIDAD] [binary] (10) NULL ,
[TIENE_HABER_JUB] [char] (1) COLLATE Modern_Spanish_CI_AS NULL ,
[PERCIBE_RETIRO] [char] (1) COLLATE Modern_Spanish_CI_AS NULL ,
[PORCENTAJE_RETIRO] [int] NULL ,
[PROVINCIA_NAC] [binary] (10) NULL ,
[SEXO] [char] (6) COLLATE Modern_Spanish_CI_AS NULL ,
[TIPO_DOCUMENTO] [char] (6) COLLATE Modern_Spanish_CI_AS NULL ,
[VIVE] [char] (1) COLLATE Modern_Spanish_CI_AS NULL
) ON [PRIMARY]
GO


update t_personas
set NIV_ESC_COMP = 0x312DA13D0CFD3931111A , NIV_ESC_CURSA aa_escolaridades.idnivel
from aa_escolaridades
where code =( select max(aa_escolaridades.code)
from aa_escolaridades
where aa_escolaridades.persona = t_personas.objectid
group by persona)

muchisimas gracias a todos

Preguntas similare

Leer las respuestas

#1 Alejandro Mesa
02/08/2005 - 22:41 | Informe spam
Trata:

update
t_personas
set
NIV_ESC_COMP = 0x312DA13D0CFD3931111A,
NIV_ESC_CURSA = (

select
aa_escolaridades.idnivel
from
aa_escolaridades
where
aa_escolaridades = t_personas.objectid
and code =(
select
max(a.code)
from
aa_escolaridades as a
where
a.persona = t_personas.objectid
)
)
where
exists(select * from aa_escolaridades as b where b.persona =
t_personas.objectid)
go


AMB

"vezat" wrote:

hola mi problema es el siguiente update demora muchisimo
la tabla t_personas tiene 70000 registros, aa_escolaridades tiene unos 25000
y aparte esta indexada por el campo persona, las estructuras de cada una son
las siguientes
debe haber alguna manera de escribirlo de manera que funcione mejor.

CREATE TABLE [dbo].[aa_escolaridades] (
[idtitulo] [binary] (10) NOT NULL ,
[description] [varchar] (60) COLLATE Modern_Spanish_CI_AS NULL ,
[idnivel] [binary] (10) NOT NULL ,
[code] [char] (6) COLLATE Modern_Spanish_CI_AS NOT NULL ,
[idcertificado] [binary] (10) NOT NULL ,
[persona] [binary] (10) NULL
) ON [PRIMARY]
GO

CREATE TABLE [dbo].[t_personas] (
[OBJECTID] [binary] (10) NOT NULL ,
[OLMARK] [int] NOT NULL ,
[ESTADO_CIVIL] [char] (6) COLLATE Modern_Spanish_CI_AS NULL ,
[LOCALIDAD_NAC] [binary] (10) NULL ,
[GRPFAC_SANG] [char] (6) COLLATE Modern_Spanish_CI_AS NULL ,
[NRO_CE] [char] (10) COLLATE Modern_Spanish_CI_AS NULL ,
[NIV_ESC_COMP] [binary] (10) NULL ,
[NIV_ESC_CURSA] [binary] (10) NULL ,
[PROVINCIA_CI] [binary] (10) NULL ,
[EMAIL] [varchar] (60) COLLATE Modern_Spanish_CI_AS NULL ,
[APELLIDO] [varchar] (40) COLLATE Modern_Spanish_CI_AS NULL ,
[CUIT_CUIL] [char] (15) COLLATE Modern_Spanish_CI_AS NULL ,
[ES_DISCAPACITADO] [char] (1) COLLATE Modern_Spanish_CI_AS NULL ,
[ES_ZURDO] [char] (1) COLLATE Modern_Spanish_CI_AS NULL ,
[FECHA_NACIMIENTO] [datetime] NULL ,
[NOMBRE] [varchar] (40) COLLATE Modern_Spanish_CI_AS NULL ,
[NRO_CI] [char] (10) COLLATE Modern_Spanish_CI_AS NULL ,
[NRO_DOCUMENTO] [char] (10) COLLATE Modern_Spanish_CI_AS NULL ,
[NRO_PASAPORTE] [char] (10) COLLATE Modern_Spanish_CI_AS NULL ,
[PAIS_NAC] [binary] (10) NULL ,
[PAIS_NACIONALIDAD] [binary] (10) NULL ,
[TIENE_HABER_JUB] [char] (1) COLLATE Modern_Spanish_CI_AS NULL ,
[PERCIBE_RETIRO] [char] (1) COLLATE Modern_Spanish_CI_AS NULL ,
[PORCENTAJE_RETIRO] [int] NULL ,
[PROVINCIA_NAC] [binary] (10) NULL ,
[SEXO] [char] (6) COLLATE Modern_Spanish_CI_AS NULL ,
[TIPO_DOCUMENTO] [char] (6) COLLATE Modern_Spanish_CI_AS NULL ,
[VIVE] [char] (1) COLLATE Modern_Spanish_CI_AS NULL
) ON [PRIMARY]
GO


update t_personas
set NIV_ESC_COMP = 0x312DA13D0CFD3931111A , NIV_ESC_CURSA > aa_escolaridades.idnivel
from aa_escolaridades
where code =( select max(aa_escolaridades.code)
from aa_escolaridades
where aa_escolaridades.persona = t_personas.objectid
group by persona)

muchisimas gracias a todos




Respuesta Responder a este mensaje
#2 vezat
03/08/2005 - 13:09 | Informe spam
buenos dias...
alejandro...probe lo que escribiste y me dio el siguiente mensaje..'La
subconsulta ha devuelto más de un valor, lo que no es correcto cuando va a
continuación de =, !=, <, <=, >, >= o cuando se utiliza como expresión.'



Se terminó la instrucción.


"Alejandro Mesa" escribió en el
mensaje news:
Trata:

update
t_personas
set
NIV_ESC_COMP = 0x312DA13D0CFD3931111A,
NIV_ESC_CURSA = (

select
aa_escolaridades.idnivel
from
aa_escolaridades
where
aa_escolaridades = t_personas.objectid
and code =(
select
max(a.code)
from
aa_escolaridades as a
where
a.persona = t_personas.objectid
)
)
where
exists(select * from aa_escolaridades as b where b.persona > t_personas.objectid)
go


AMB

"vezat" wrote:

> hola mi problema es el siguiente update demora muchisimo
> la tabla t_personas tiene 70000 registros, aa_escolaridades tiene unos


25000
> y aparte esta indexada por el campo persona, las estructuras de cada una


son
> las siguientes
> debe haber alguna manera de escribirlo de manera que funcione mejor.
>
> CREATE TABLE [dbo].[aa_escolaridades] (
> [idtitulo] [binary] (10) NOT NULL ,
> [description] [varchar] (60) COLLATE Modern_Spanish_CI_AS NULL ,
> [idnivel] [binary] (10) NOT NULL ,
> [code] [char] (6) COLLATE Modern_Spanish_CI_AS NOT NULL ,
> [idcertificado] [binary] (10) NOT NULL ,
> [persona] [binary] (10) NULL
> ) ON [PRIMARY]
> GO
>
> CREATE TABLE [dbo].[t_personas] (
> [OBJECTID] [binary] (10) NOT NULL ,
> [OLMARK] [int] NOT NULL ,
> [ESTADO_CIVIL] [char] (6) COLLATE Modern_Spanish_CI_AS NULL ,
> [LOCALIDAD_NAC] [binary] (10) NULL ,
> [GRPFAC_SANG] [char] (6) COLLATE Modern_Spanish_CI_AS NULL ,
> [NRO_CE] [char] (10) COLLATE Modern_Spanish_CI_AS NULL ,
> [NIV_ESC_COMP] [binary] (10) NULL ,
> [NIV_ESC_CURSA] [binary] (10) NULL ,
> [PROVINCIA_CI] [binary] (10) NULL ,
> [EMAIL] [varchar] (60) COLLATE Modern_Spanish_CI_AS NULL ,
> [APELLIDO] [varchar] (40) COLLATE Modern_Spanish_CI_AS NULL ,
> [CUIT_CUIL] [char] (15) COLLATE Modern_Spanish_CI_AS NULL ,
> [ES_DISCAPACITADO] [char] (1) COLLATE Modern_Spanish_CI_AS NULL ,
> [ES_ZURDO] [char] (1) COLLATE Modern_Spanish_CI_AS NULL ,
> [FECHA_NACIMIENTO] [datetime] NULL ,
> [NOMBRE] [varchar] (40) COLLATE Modern_Spanish_CI_AS NULL ,
> [NRO_CI] [char] (10) COLLATE Modern_Spanish_CI_AS NULL ,
> [NRO_DOCUMENTO] [char] (10) COLLATE Modern_Spanish_CI_AS NULL ,
> [NRO_PASAPORTE] [char] (10) COLLATE Modern_Spanish_CI_AS NULL ,
> [PAIS_NAC] [binary] (10) NULL ,
> [PAIS_NACIONALIDAD] [binary] (10) NULL ,
> [TIENE_HABER_JUB] [char] (1) COLLATE Modern_Spanish_CI_AS NULL ,
> [PERCIBE_RETIRO] [char] (1) COLLATE Modern_Spanish_CI_AS NULL ,
> [PORCENTAJE_RETIRO] [int] NULL ,
> [PROVINCIA_NAC] [binary] (10) NULL ,
> [SEXO] [char] (6) COLLATE Modern_Spanish_CI_AS NULL ,
> [TIPO_DOCUMENTO] [char] (6) COLLATE Modern_Spanish_CI_AS NULL ,
> [VIVE] [char] (1) COLLATE Modern_Spanish_CI_AS NULL
> ) ON [PRIMARY]
> GO
>
>
> update t_personas
> set NIV_ESC_COMP = 0x312DA13D0CFD3931111A , NIV_ESC_CURSA > > aa_escolaridades.idnivel
> from aa_escolaridades
> where code =( select max(aa_escolaridades.code)
> from aa_escolaridades
> where aa_escolaridades.persona = t_personas.objectid
> group by persona)
>
> muchisimas gracias a todos
>
>
>
>
Respuesta Responder a este mensaje
#3 Alejandro Mesa
03/08/2005 - 15:36 | Informe spam
Eso quiere decir que tienes mas de una fiela en la tabla [aa_escolaridades]
cuyo valor en la columna [code] es igual al maximo para esa [persona]. Puedes
solucionar el problema usando "TOP 1" en la sentencia select.

...
NIV_ESC_CURSA = (

select TOP 1
aa_escolaridades.idnivel
from
aa_escolaridades
...
go


AMB

"vezat" wrote:

buenos dias...
alejandro...probe lo que escribiste y me dio el siguiente mensaje..'La
subconsulta ha devuelto más de un valor, lo que no es correcto cuando va a
continuación de =, !=, <, <=, >, >= o cuando se utiliza como expresión.'



Se terminó la instrucción.


"Alejandro Mesa" escribió en el
mensaje news:
> Trata:
>
> update
> t_personas
> set
> NIV_ESC_COMP = 0x312DA13D0CFD3931111A,
> NIV_ESC_CURSA = (
>
> select
> aa_escolaridades.idnivel
> from
> aa_escolaridades
> where
> aa_escolaridades = t_personas.objectid
> and code =(
> select
> max(a.code)
> from
> aa_escolaridades as a
> where
> a.persona = t_personas.objectid
> )
> )
> where
> exists(select * from aa_escolaridades as b where b.persona > > t_personas.objectid)
> go
>
>
> AMB
>
> "vezat" wrote:
>
> > hola mi problema es el siguiente update demora muchisimo
> > la tabla t_personas tiene 70000 registros, aa_escolaridades tiene unos
25000
> > y aparte esta indexada por el campo persona, las estructuras de cada una
son
> > las siguientes
> > debe haber alguna manera de escribirlo de manera que funcione mejor.
> >
> > CREATE TABLE [dbo].[aa_escolaridades] (
> > [idtitulo] [binary] (10) NOT NULL ,
> > [description] [varchar] (60) COLLATE Modern_Spanish_CI_AS NULL ,
> > [idnivel] [binary] (10) NOT NULL ,
> > [code] [char] (6) COLLATE Modern_Spanish_CI_AS NOT NULL ,
> > [idcertificado] [binary] (10) NOT NULL ,
> > [persona] [binary] (10) NULL
> > ) ON [PRIMARY]
> > GO
> >
> > CREATE TABLE [dbo].[t_personas] (
> > [OBJECTID] [binary] (10) NOT NULL ,
> > [OLMARK] [int] NOT NULL ,
> > [ESTADO_CIVIL] [char] (6) COLLATE Modern_Spanish_CI_AS NULL ,
> > [LOCALIDAD_NAC] [binary] (10) NULL ,
> > [GRPFAC_SANG] [char] (6) COLLATE Modern_Spanish_CI_AS NULL ,
> > [NRO_CE] [char] (10) COLLATE Modern_Spanish_CI_AS NULL ,
> > [NIV_ESC_COMP] [binary] (10) NULL ,
> > [NIV_ESC_CURSA] [binary] (10) NULL ,
> > [PROVINCIA_CI] [binary] (10) NULL ,
> > [EMAIL] [varchar] (60) COLLATE Modern_Spanish_CI_AS NULL ,
> > [APELLIDO] [varchar] (40) COLLATE Modern_Spanish_CI_AS NULL ,
> > [CUIT_CUIL] [char] (15) COLLATE Modern_Spanish_CI_AS NULL ,
> > [ES_DISCAPACITADO] [char] (1) COLLATE Modern_Spanish_CI_AS NULL ,
> > [ES_ZURDO] [char] (1) COLLATE Modern_Spanish_CI_AS NULL ,
> > [FECHA_NACIMIENTO] [datetime] NULL ,
> > [NOMBRE] [varchar] (40) COLLATE Modern_Spanish_CI_AS NULL ,
> > [NRO_CI] [char] (10) COLLATE Modern_Spanish_CI_AS NULL ,
> > [NRO_DOCUMENTO] [char] (10) COLLATE Modern_Spanish_CI_AS NULL ,
> > [NRO_PASAPORTE] [char] (10) COLLATE Modern_Spanish_CI_AS NULL ,
> > [PAIS_NAC] [binary] (10) NULL ,
> > [PAIS_NACIONALIDAD] [binary] (10) NULL ,
> > [TIENE_HABER_JUB] [char] (1) COLLATE Modern_Spanish_CI_AS NULL ,
> > [PERCIBE_RETIRO] [char] (1) COLLATE Modern_Spanish_CI_AS NULL ,
> > [PORCENTAJE_RETIRO] [int] NULL ,
> > [PROVINCIA_NAC] [binary] (10) NULL ,
> > [SEXO] [char] (6) COLLATE Modern_Spanish_CI_AS NULL ,
> > [TIPO_DOCUMENTO] [char] (6) COLLATE Modern_Spanish_CI_AS NULL ,
> > [VIVE] [char] (1) COLLATE Modern_Spanish_CI_AS NULL
> > ) ON [PRIMARY]
> > GO
> >
> >
> > update t_personas
> > set NIV_ESC_COMP = 0x312DA13D0CFD3931111A , NIV_ESC_CURSA > > > aa_escolaridades.idnivel
> > from aa_escolaridades
> > where code =( select max(aa_escolaridades.code)
> > from aa_escolaridades
> > where aa_escolaridades.persona = t_personas.objectid
> > group by persona)
> >
> > muchisimas gracias a todos
> >
> >
> >
> >



Respuesta Responder a este mensaje
#4 vezat
03/08/2005 - 17:18 | Informe spam
hola..grupo
alejandro. es impresionante lo rapido que funciono..
muchisimas gracias ppor tu ayuda
"Alejandro Mesa" escribió en el
mensaje news:
Eso quiere decir que tienes mas de una fiela en la tabla


[aa_escolaridades]
cuyo valor en la columna [code] es igual al maximo para esa [persona].


Puedes
solucionar el problema usando "TOP 1" en la sentencia select.

...
NIV_ESC_CURSA = (

select TOP 1
aa_escolaridades.idnivel
from
aa_escolaridades
...
go


AMB

"vezat" wrote:

> buenos dias...
> alejandro...probe lo que escribiste y me dio el siguiente


mensaje..'La
> subconsulta ha devuelto más de un valor, lo que no es correcto cuando va


a
> continuación de =, !=, <, <=, >, >= o cuando se utiliza como expresión.'
>
>
>
> Se terminó la instrucción.
>
>
> "Alejandro Mesa" escribió en


el
> mensaje news:
> > Trata:
> >
> > update
> > t_personas
> > set
> > NIV_ESC_COMP = 0x312DA13D0CFD3931111A,
> > NIV_ESC_CURSA = (
> >
> > select
> > aa_escolaridades.idnivel
> > from
> > aa_escolaridades
> > where
> > aa_escolaridades = t_personas.objectid
> > and code =(
> > select
> > max(a.code)
> > from
> > aa_escolaridades as a
> > where
> > a.persona = t_personas.objectid
> > )
> > )
> > where
> > exists(select * from aa_escolaridades as b where b.persona > > > t_personas.objectid)
> > go
> >
> >
> > AMB
> >
> > "vezat" wrote:
> >
> > > hola mi problema es el siguiente update demora muchisimo
> > > la tabla t_personas tiene 70000 registros, aa_escolaridades tiene


unos
> 25000
> > > y aparte esta indexada por el campo persona, las estructuras de cada


una
> son
> > > las siguientes
> > > debe haber alguna manera de escribirlo de manera que funcione mejor.
> > >
> > > CREATE TABLE [dbo].[aa_escolaridades] (
> > > [idtitulo] [binary] (10) NOT NULL ,
> > > [description] [varchar] (60) COLLATE Modern_Spanish_CI_AS NULL ,
> > > [idnivel] [binary] (10) NOT NULL ,
> > > [code] [char] (6) COLLATE Modern_Spanish_CI_AS NOT NULL ,
> > > [idcertificado] [binary] (10) NOT NULL ,
> > > [persona] [binary] (10) NULL
> > > ) ON [PRIMARY]
> > > GO
> > >
> > > CREATE TABLE [dbo].[t_personas] (
> > > [OBJECTID] [binary] (10) NOT NULL ,
> > > [OLMARK] [int] NOT NULL ,
> > > [ESTADO_CIVIL] [char] (6) COLLATE Modern_Spanish_CI_AS NULL ,
> > > [LOCALIDAD_NAC] [binary] (10) NULL ,
> > > [GRPFAC_SANG] [char] (6) COLLATE Modern_Spanish_CI_AS NULL ,
> > > [NRO_CE] [char] (10) COLLATE Modern_Spanish_CI_AS NULL ,
> > > [NIV_ESC_COMP] [binary] (10) NULL ,
> > > [NIV_ESC_CURSA] [binary] (10) NULL ,
> > > [PROVINCIA_CI] [binary] (10) NULL ,
> > > [EMAIL] [varchar] (60) COLLATE Modern_Spanish_CI_AS NULL ,
> > > [APELLIDO] [varchar] (40) COLLATE Modern_Spanish_CI_AS NULL ,
> > > [CUIT_CUIL] [char] (15) COLLATE Modern_Spanish_CI_AS NULL ,
> > > [ES_DISCAPACITADO] [char] (1) COLLATE Modern_Spanish_CI_AS NULL ,
> > > [ES_ZURDO] [char] (1) COLLATE Modern_Spanish_CI_AS NULL ,
> > > [FECHA_NACIMIENTO] [datetime] NULL ,
> > > [NOMBRE] [varchar] (40) COLLATE Modern_Spanish_CI_AS NULL ,
> > > [NRO_CI] [char] (10) COLLATE Modern_Spanish_CI_AS NULL ,
> > > [NRO_DOCUMENTO] [char] (10) COLLATE Modern_Spanish_CI_AS NULL ,
> > > [NRO_PASAPORTE] [char] (10) COLLATE Modern_Spanish_CI_AS NULL ,
> > > [PAIS_NAC] [binary] (10) NULL ,
> > > [PAIS_NACIONALIDAD] [binary] (10) NULL ,
> > > [TIENE_HABER_JUB] [char] (1) COLLATE Modern_Spanish_CI_AS NULL ,
> > > [PERCIBE_RETIRO] [char] (1) COLLATE Modern_Spanish_CI_AS NULL ,
> > > [PORCENTAJE_RETIRO] [int] NULL ,
> > > [PROVINCIA_NAC] [binary] (10) NULL ,
> > > [SEXO] [char] (6) COLLATE Modern_Spanish_CI_AS NULL ,
> > > [TIPO_DOCUMENTO] [char] (6) COLLATE Modern_Spanish_CI_AS NULL ,
> > > [VIVE] [char] (1) COLLATE Modern_Spanish_CI_AS NULL
> > > ) ON [PRIMARY]
> > > GO
> > >
> > >
> > > update t_personas
> > > set NIV_ESC_COMP = 0x312DA13D0CFD3931111A , NIV_ESC_CURSA > > > > aa_escolaridades.idnivel
> > > from aa_escolaridades
> > > where code =( select max(aa_escolaridades.code)
> > > from aa_escolaridades
> > > where aa_escolaridades.persona = t_personas.objectid
> > > group by persona)
> > >
> > > muchisimas gracias a todos
> > >
> > >
> > >
> > >
>
>
>
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida