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ú