SQL Server 2008 Casting varchar datetime

Je suis en cours d'exécution dans un problème de casting un VARCHAR dans une table dans un DATETIME et ensuite l'utiliser dans une comparaison. Le format ('2010-09-02 10:38:31.000') semble être correct sur tous les dossiers, et je peux sélectionner les données sans aucun problème. Cependant, si j'essaie d'utiliser le new datetime dans la clause where, j'obtiens l'erreur: échec de la Conversion lors de la conversion de la date et/ou le temps de chaîne de caractères.

Donc, juste pour être clair, cela fonctionne:

SELECT Field1, Field2, CAST(Field3 AS DATETIME) AS DateTaken FROM MyTable;

Qui retourne toutes les données comme prévu, et il n'y a pas les dates nulles. Le suivant échoue avec le mentionné précédemment erreur.

SELECT Field1, Field2 FROM MyTable WHERE CAST(Field3 AS DATETIME) > @startDate;

J'ai essayé à l'aide d'une vue de récupérer les données, mais il avait la même erreur. Ensuite, j'ai essayé de créer une table temporaire pour les données comme si...

SELECT Field1, Field2, CAST(Field3 AS DATETIME) AS Field3 INTO _MyTable;
SELECT Field1, Field2 FROM _MyTable WHERE Field3 > @startDate;

Qui fonctionne avec succès.

L'ensemble de mes recherches juste conduit à la mise en forme incorrecte dates et /ou les paramètres régionaux provoquant havok qui ne semble pas être la cause dans mon cas. Je préfère ne pas en créer un tableau à chaque fois que j'ai besoin d'utiliser un DATETIME plâtre, c'est ce que je fais mal ici? L'aide est très apprécié!

  • Quel est le type de données de la @date de début variable? Et quelle est la valeur utilisez-vous pour cela?
  • Dans la version finale, il sera un plâtre à partir d'un VARCHAR en tant que bien, mais dans le but d'éliminer JETÉ comme une variable, j'ai l'aide de la fonction GETDATE()
  • pourquoi ne pas simplement passer un datetime et d'éviter le casting?