2011-12-20 15 views
8

¿Por qué este trabajo ...variable de Varchar no está funcionando en la cláusula WHERE

DECLARE @MyInt int = 12345; 
SELECT * FROM MyTable WHERE MyId = @MyInt; --Returns 1 row 
SELECT * FROM MyTable WHERE MyId = 12345; --Returns 1 row 

pero esto no lo hace?

DECLARE @MyVarchar varchar = 'ABCDEF'; 
SELECT * FROM MyTable WHERE MyId = @MyVarchar; --Returns 0 rows 
SELECT * FROM MyTable WHERE MyId = 'ABCDEF'; --Returns 1 row 

versión de SQL Server es 10.50.1746

Respuesta

14

Porque cuando declare, por defecto varchar longitud se 1. Entonces @MyVarchar termina siendo 'A'.

Esto es diferente de cast(something as varchar), donde la longitud predeterminada es 30.

Lo correcto es

DECLARE @MyVarchar varchar(10) = 'ABCDEF'; 

donde 10 es la longitud de la columna en la tabla.

+0

Oh, qué tonto de mi parte. O tal vez es una tontería de Microsoft –