Si debe usar un formato de fecha basado en cadenas, debe elegir uno que sea seguro y funciona en todas las instancias de SQL Server, independientemente del formato de fecha, el idioma y la configuración regional.
Ese formato se conoce como ISO-8601 formato y es
YYYYMMDD (note: **NO** dashes!)
o
YYYY-MM-DDTHH:MM:SSS
para un DATETIME
columna.
Así que en lugar de
Convert(datetime, '28/11/2012', 103)
deberías usar
CAST('20121128' AS DATETIME)
y entonces deberías estar bien.
Si está en SQL Server 2008 - también podría considerar usar DATE
(en lugar de DATETIME
) para casos en los que solo necesita la fecha (sin parte de la hora). Eso sería incluso más fácil que usar DATETIME
y tener la porción de tiempo siempre 00:00:00