Algo sobre Timestamp

22/06/2005 - 18:43 por Irak Rubio | Informe spam
Hola que tal,
Tengo una tabla que contiene un campo de tipo Timestamp
Y necesito hacer una consulta que me devuelva un registro
para ver si este no ha sufrido cambios
no me acepta la siguiente instruccion:

Select * from MyTabla Where TmStamp = '0x000000000DB80C62'
Me dice que hay un error de conversion y utilizo
lo siguiente:

SELECT * From WHERE CAST(tstamp AS varchar(25))= '0x000000000DB80C62'

y no me devuelve noingun valor aun a sabiendas de que si existe ese numero
porque no ha cambiado.

Sabes como puedo hacerle para recuperar ese valor?

Gracias

Preguntas similare

Leer las respuestas

#1 Alejandro Mesa
22/06/2005 - 19:00 | Informe spam
Trata:

Select *
from MyTabla
Where master.dbo.fn_varbintohexstr(TmStamp) = '0x000000000DB80C62'


AMB

"Irak Rubio" wrote:

Hola que tal,
Tengo una tabla que contiene un campo de tipo Timestamp
Y necesito hacer una consulta que me devuelva un registro
para ver si este no ha sufrido cambios
no me acepta la siguiente instruccion:

Select * from MyTabla Where TmStamp = '0x000000000DB80C62'
Me dice que hay un error de conversion y utilizo
lo siguiente:

SELECT * From WHERE CAST(tstamp AS varchar(25))= '0x000000000DB80C62'

y no me devuelve noingun valor aun a sabiendas de que si existe ese numero
porque no ha cambiado.

Sabes como puedo hacerle para recuperar ese valor?

Gracias


Respuesta Responder a este mensaje
#2 Irak Rubio
22/06/2005 - 20:23 | Informe spam
Antes que nada Gracias por contestar.
Hice la prueba que me indicaste
Y efectivamente esa es la solucion,
pero la consulta me tardó bastante en regresar
(¿Crees que sea porque no generé indices para este campo?)
Y si yo generara un indice para este tipo de campo
crees que afectaría demasiado el rendimiento de mi servidor?

Gracias otra vez

"Alejandro Mesa" escribió:

Trata:

Select *
from MyTabla
Where master.dbo.fn_varbintohexstr(TmStamp) = '0x000000000DB80C62'


AMB

"Irak Rubio" wrote:

> Hola que tal,
> Tengo una tabla que contiene un campo de tipo Timestamp
> Y necesito hacer una consulta que me devuelva un registro
> para ver si este no ha sufrido cambios
> no me acepta la siguiente instruccion:
>
> Select * from MyTabla Where TmStamp = '0x000000000DB80C62'
> Me dice que hay un error de conversion y utilizo
> lo siguiente:
>
> SELECT * From WHERE CAST(tstamp AS varchar(25))= '0x000000000DB80C62'
>
> y no me devuelve noingun valor aun a sabiendas de que si existe ese numero
> porque no ha cambiado.
>
> Sabes como puedo hacerle para recuperar ese valor?
>
> Gracias
>
>
Respuesta Responder a este mensaje
#3 Alejandro Mesa
22/06/2005 - 21:01 | Informe spam
Irak Rubio,

pero la consulta me tardó bastante en regresar
(¿Crees que sea porque no generé indices para este campo?)
Y si yo generara un indice para este tipo de campo
crees que afectaría demasiado el rendimiento de mi servidor?



Se demorara igual aunque crees un indice es esa tabla y por esa columna, y
esto se debe a que la expresion usada en la clausula "where" no es
considerada por sql server como un argumento de busqueda y por lo tanta no
hara un uso optimo de los indices. Puedes corroborar esto comparando los
planes de ejecucion sin el indice y con el indice.

> Where master.dbo.fn_varbintohexstr(TmStamp) = '0x000000000DB80C62'



Para que sql server contemple la posibilidad de usar el indice, la expresion
debe ser parecida a:

...
Where TmStamp = constante

Puedes leer sobre este tema en el link que adjunto.

Ajuste y optimización del rendimiento de MS SQL Server para programadores,
segunda parte: El optimizador de consultas
http://www.microsoft.com/latam/tech...005/art04/

Pudieras hacernos el favor de postear el plan de ejecucion estimado?

use tu_base_de_datos
go

set showplan_text on
go

Select *
from MyTabla
Where master.dbo.fn_varbintohexstr(TmStamp) = '0x000000000DB80C62'
go

set showplan_text off
go


AMB

"Irak Rubio" wrote:

Antes que nada Gracias por contestar.
Hice la prueba que me indicaste
Y efectivamente esa es la solucion,
pero la consulta me tardó bastante en regresar
(¿Crees que sea porque no generé indices para este campo?)
Y si yo generara un indice para este tipo de campo
crees que afectaría demasiado el rendimiento de mi servidor?

Gracias otra vez

"Alejandro Mesa" escribió:

> Trata:
>
> Select *
> from MyTabla
> Where master.dbo.fn_varbintohexstr(TmStamp) = '0x000000000DB80C62'
>
>
> AMB
>
> "Irak Rubio" wrote:
>
> > Hola que tal,
> > Tengo una tabla que contiene un campo de tipo Timestamp
> > Y necesito hacer una consulta que me devuelva un registro
> > para ver si este no ha sufrido cambios
> > no me acepta la siguiente instruccion:
> >
> > Select * from MyTabla Where TmStamp = '0x000000000DB80C62'
> > Me dice que hay un error de conversion y utilizo
> > lo siguiente:
> >
> > SELECT * From WHERE CAST(tstamp AS varchar(25))= '0x000000000DB80C62'
> >
> > y no me devuelve noingun valor aun a sabiendas de que si existe ese numero
> > porque no ha cambiado.
> >
> > Sabes como puedo hacerle para recuperar ese valor?
> >
> > Gracias
> >
> >
Respuesta Responder a este mensaje
#4 Alejandro Mesa
23/06/2005 - 14:25 | Informe spam
Irak,

Hoy de regreso al trabajo me vino a la mente este hilo y me di cuenta que la
busqueda la estamos haciendo basado en un valor varchar y por lo tanto
debemos convertir la columna a varchar para poder hacer la comparacion y es
ahi donde perdemos. El tipo de datos timestamp o rowversion es equivalente a
una columna binary(8) si no permite valores nulos o varbinary(8) si permite
valores nulos, asi que el valor almacenado no es mas que un numero expresado
en sistema hexadecimal por lo uqe es valida la expresion:

...
Where TmStamp = 0x000000000DB80C62


...
Where TmStamp = cast(0x000000000DB80C62 as bigint)

y usando este tipo de expresion si que tiene mucho sentido tener un indice.
Haz la prueba y cuentanos.


AMB

"Irak Rubio" wrote:

Antes que nada Gracias por contestar.
Hice la prueba que me indicaste
Y efectivamente esa es la solucion,
pero la consulta me tardó bastante en regresar
(¿Crees que sea porque no generé indices para este campo?)
Y si yo generara un indice para este tipo de campo
crees que afectaría demasiado el rendimiento de mi servidor?

Gracias otra vez

"Alejandro Mesa" escribió:

> Trata:
>
> Select *
> from MyTabla
> Where master.dbo.fn_varbintohexstr(TmStamp) = '0x000000000DB80C62'
>
>
> AMB
>
> "Irak Rubio" wrote:
>
> > Hola que tal,
> > Tengo una tabla que contiene un campo de tipo Timestamp
> > Y necesito hacer una consulta que me devuelva un registro
> > para ver si este no ha sufrido cambios
> > no me acepta la siguiente instruccion:
> >
> > Select * from MyTabla Where TmStamp = '0x000000000DB80C62'
> > Me dice que hay un error de conversion y utilizo
> > lo siguiente:
> >
> > SELECT * From WHERE CAST(tstamp AS varchar(25))= '0x000000000DB80C62'
> >
> > y no me devuelve noingun valor aun a sabiendas de que si existe ese numero
> > porque no ha cambiado.
> >
> > Sabes como puedo hacerle para recuperar ese valor?
> >
> > Gracias
> >
> >
Respuesta Responder a este mensaje
#5 Irak Rubio
23/06/2005 - 16:19 | Informe spam
Que tal Alejandro:
Como me indicaste hice las pruebas siguientes:


El Resultado es:
Select * from soshipheader Where master.dbo.fn_varbintohexstr(TStamp) =
'0x0000000000435A2A'


|--Filter(WHERE:([master].[dbo].[fn_varbintohexstr](Convert([SOShipHeader].[tstamp]))='0x0000000000435A2A'))
|--Clustered Index
Scan(OBJECT:([PruebaApp].[dbo].[SOShipHeader].[SOShipHeader0]))


En cuanto tenga las demas pruebas enseguida te lo comento.
Gracias


"Irak Rubio" escribió:

Hola que tal,
Tengo una tabla que contiene un campo de tipo Timestamp
Y necesito hacer una consulta que me devuelva un registro
para ver si este no ha sufrido cambios
no me acepta la siguiente instruccion:

Select * from MyTabla Where TmStamp = '0x000000000DB80C62'
Me dice que hay un error de conversion y utilizo
lo siguiente:

SELECT * From WHERE CAST(tstamp AS varchar(25))= '0x000000000DB80C62'

y no me devuelve noingun valor aun a sabiendas de que si existe ese numero
porque no ha cambiado.

Sabes como puedo hacerle para recuperar ese valor?

Gracias


Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida