J'adore la nouvelle date datatype dans SQL Server 2008, mais quand je compare un champ DATE à un champ DATETIME sur un serveur lié (SQL 2005, dans ce cas), comme ceci:Pourquoi SQL Server ne convertit-il pas automatiquement DATE en DATETIME à des fins de comparaison?
DECLARE @MyDate DATE
SET @MyDate = CONVERT(DATE, GETDATE())
SELECT *
FROM MySQL2005LinkedServer.SomeDB.dbo.SomeTable
WHERE SomeDatetimeField < @MyDate
Je reçois ce erreur:
OLE DB provider "SQLNCLI10" returned message "Unspecified error".
OLE DB provider "SQLNCLI10" returned message "The scale is invalid.".
« l'échelle est non valide » est évidemment parce que le client natif passe le type de données DATE sur le serveur lié, et comme il est SQL 2005, il ne sait pas quoi faire avec elle. L'exécution de cette même requête sur un serveur 2008 fonctionne parfaitement - SQL Server est capable de comparer les types de données DATE et DATETIME sans problème.
Voici ma question - existe-t-il une raison pour laquelle le client natif ne convertit pas automatiquement la valeur DATE de '2009-11-09' en DATETIME du '2009-11-09 00: 00: 00.000' que la version précédente de SQL Server ne s'étouffera pas?
-1. Cette réponse est pour Oracle, lorsque les balises spécifient SQL Server. – devstuff
@Devstuff, je veux juste partager la réponse que je connaissais. Je l'ai trouvé la semaine dernière et est sur ma langue –