El 31 de septiembre no es una fecha, por lo que SQL no puede convertirla en una.
Aparte, debe codificar las fechas en un formato específico de la cultura (yyyyMMdd). 01/08/2012
puede convertirse al 1 de agosto en su servidor, pero ejecutarse en otro y podría ser el 8 de enero. 20120801 se convertirá al 1 de agosto en todos máquinas.
Además, ¿por qué estás convirtiendo fechas a NVARCHAR
? ? Está eliminando cualquier beneficio de los índices que tiene y también está realizando conversiones implícitas y explícitas innecesarias. Asumiendo MESSAGEINSERTDATE
es una columna DATETIME que podría usar
WHERE MESSAGEINSERTDATE BETWEEN '20120801' AND '20120930'
Si necesita eliminar la hora de MESSAGEINSERTDATE
usar
CAST(MESSAGEINSERTDATE AS DATE)