¿Es obligatorio realizar un CAST a un tipo de datos específico para aplicar criterios a una columna sql_variant en SQL SERVER?

Si tengo una tabla con columnas así:

KeyName varchar(50)  
RowNumber int  
LocationValue sql_variant  


select * from myTable where LocationValue = 'some string' -- no results, but no error
select * from myTable where CAST(LocationValue AS VARCHAR) = 'some string' --works

Si LocationValue puede contener datos numéricos o de cadena, ¿es obligatorio CAST esa columna a NUMERIC o VARCHAR para aplicarle criterios?

No hacerlo no causa ningún error, sin embargo, no se devuelven resultados.

preguntado el 16 de mayo de 11 a las 17:05

Tal vez este link puedo ayudarte. -

1 Respuestas

No es obligatorio como tal, pero debe CASTARlo a un tipo significativo para esa comparación: aunque solo sea por su capacidad de mantenimiento y su cordura.

Las reglas para las conversiones están aquí en MSDN. Por encima de eso, tiene cosas sobre la intercalación y SET ANSI_PADDING que afectarán los resultados. Un CAST explícito anula estas reglas.

En realidad, no puedo decir por qué ve esto porque no he usado sql_variant durante años, pero lo remito a mi primera declaración sobre "cordura".

contestado el 16 de mayo de 11 a las 22:05

Marcado como correcto, aunque creo que is obligatorio, pero incluso si no lo es, creo que es una buena práctica hacerlo. - tbone

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.