Ver Mensaje Individual
  #2  
Antiguo 02-03-2013
Avatar de StartKill
StartKill StartKill is offline
Miembro
 
Registrado: ene 2004
Posts: 299
Reputación: 23
StartKill Va por buen camino
Replanteando mi duda

Uso el SQL Server 2008, allí tengo una tabla de un aproximado de 16 millones de filas.

Una de sus columnas es de tipo char(8) y es el PK..

Para usar esta tabla, tengo un adoQuery y el sql es:
Código SQL [-]
select * from nro_key = :nro_key
El componente adoQuery tiene parametro "nro_key" de tipo ftString.

Pruebas con el query anterior

1.- Asigno un valor al parámetro de mi sentencia contenida en el adoQuery.
Utilizo profiler para ver la sentencia que envía al server que es la siguiente:
Código SQL [-]
exec sp_executesql N'
select * from  padron 
where nro_key = @P1  ',N'@P1 nvarchar(8)',N'00148894'
Demora 25 segundos para darme el resultado.

2.- Abro el " management studio" y tipeo en duro los siguiente:
Código SQL [-]
select * from  padron where nro_key = '00148894'
El resultado es menos de un segundo.

3.- Nuevamente en el "management studio" copio la instrucción que capturé con el profiler, pero le hago un pequeño cambio:
Cambio el tipo de parametro de nvarchar(8) a varchar(8)
Código SQL [-]
exec sp_executesql N'
select * from  padron 
where nro_key = @P1  ',N'@P1 varchar(8)',N'00148894'
El resultado es veloz como en el punto 2.

//------------

Por lo que me doy cuenta el Delphi me crea la instrucción y la envía al Sql Server.
Mi duda es: Hay forma de indicar en el adoQuery que el parámetro para "nro_key" sea de tipo varchar(8)?

Lo que no comprendo es: Mi columna PK es de tipo char(8), por que Delphi crea la instrucción con un parametro de tipo nvarchar(8)?

Select original en el adoQuery
Código SQL [-]
select * from nro_key = :nro_key

Select enviado por delphi al SQL Server
Código SQL [-]
exec sp_executesql N'
select * from  padron 
where nro_key = @P1  ',N'@P1 nvarchar(8)',N'00148894'



A la espera de sus comentarios, criticas y regalos...


Your friend

Startkill
Lima-Perú
Responder Con Cita