SQL Server ne peut pas appeler de méthodes à la date
J'ai une colonne DATETIME de SQL Server 2008 table appelée ShiftDate. Je veux convertir cette DATE colonne dans une requête:
SELECT ID, ScheduleID, ShiftDate, CONVERT(DATE, ShiftDate) AS ProductionDate
FROM dbo.ScheduleResults
Je suis l'édition de cette requête dans SSMS. Si j'exécute la requête dans une requête standard de la fenêtre, je ne reçois pas toutes les erreurs. Si je l'exécute dans la Vue de la fenêtre de l'éditeur, j'ai l'erreur "Impossible d'Appeler des Méthodes sur la Date".
J'ai essayé de la FONTE de la méthode, mais il obtient la même erreur.
SELECT ID, ScheduleID, ShiftDate, CAST(ShiftDate AS DATE) AS ProductionDate
FROM dbo.ScheduleResults
Le message d'erreur complet est:
Executed SQL statement: SELECT ID, ScheduleID, ShiftDate, CAST(ShiftDate as DATE).ToString() AS ProductionDate FROM dbo.ScheduleResults
Error Source: .Net SqlClient Data Provider
Error Message: Cannot call methods on date.
Je suis enclin à penser que c'est un bug dans SSMS, mais j'aimerais faire quelques commentaires de StackOverflow gens comme à la façon de convertir une colonne datetime à une date. Je peux facilement le convertir en chaîne de la colonne, mais il n'est pas idéale car Excel ne sera pas le voir comme une date.
source d'informationauteur ccampj
Vous devez vous connecter pour publier un commentaire.
Vous avez raison, c'est un bug dans SSMS. Je suis à l'aide de SQL Server Management Studio 2008 R2 et quand j'essaie de créer une Vue en utilisant le haut-designer, j'obtiens le même message d'erreur que vous:
@Aaron Bertrand mentionné, pour résoudre le problème, sélectionnez "Nouvelle Requête" et créer la Vue dans la fenêtre de Requête. Pour votre code, ce serait:
Il semble être un vrai bug comme mentionné ci-dessus par https://stackoverflow.com/users/464923/willhérité de MS Access vieux jours avec tous ses inconvénients, il suffit d'ignorer le message d'erreur et d'enregistrer votre vue, puis l'exécuter dans un SSM fenêtre, aucune erreur ne sera générée .
De mon expérience, l'erreur peut être ignorée. Il suffit d'enregistrer la vue et de la requête en dehors de la Conception/"Afficher la fenêtre" editeur (dans une nouvelle fenêtre de requête) et il va fonctionner.
Vous pouvez créer une fonction et l'utiliser quand vous en avez besoin pour convertir un DATETIME à ce JOUR.
Alors, à votre avis, appeler la fonction de convertir vos DATETIME.
Vous n'obtiendrez pas le message d'erreur et il est réutilisable. (Testé dans SQL Server 2012)
Je peux supposer que (ShiftDate QUE la DATE) doit avoir un format datetime.
Si vous essayez ceci:
CAST(CONVERT(DATE, ShiftDate) Varchar)
Parfois cela fonctionne...
(Oui je sais c'est pas la Date, mais c'est un pas de plus)
Dans la même requête, il a travaillé à l'extérieur de la sélection, mais pas à l'intérieur de l'union...
Ne me demandez pas pourquoi 😛
Vous pouvez utiliser l'option Convertir à la place.
Vous pouvez regarder les différentes options de formats de date ici.
Ce bug est toujours présent dans Management Studio 2016, semble pour l'instant la seule solution est de jeter un varchar et de vivre avec elle si vous voulez utiliser le concepteur de requêtes.
C'est également le cas lorsque, par erreur, vous mettre la colonne à plusieurs reprises après tablename.
Supposons que TableName est
Person
et de la colonne estAge
et vous avez écrit dans la requête comme:
Espère que mon expérience aidera quelqu'un.
Le problème est avec le nom ShiftDate de l'attribut dans la table sous-jacente. Lorsque renommé pour quelque chose qui ne contiennent pas le mot Date de la dernière des personnages, le point de vue des œuvres. Essayez de renommer à ShiftDateDD par exemple.