2010-12-22 7 views
0
UPDATE tblCampaigns SET startDate = '4 December, 2010', endDate = '14 January, 2011' WHERE ID = 147 
UPDATE tblCampaigns SET startDate = '24 December, 2010', endDate = '17 Febuary, 2011' WHERE parentID = 147 and campaignName = 'regerg' 

Microsoft OLE DB Provider for SQL Server error '80040e07' 

Syntax error converting datetime from character string. 

/bb/campaignManager/index.asp, line 147 

Diese arbeiten, wenn die Daten 2010 sind, aber sobald ein 2011 in dort gesetzt wird, geht es falsch, irgendwelche Ideen? Es ist wahrscheinlich im falschen Format richtig?SQL Server Datum Fehler

+0

Nur Fehler Rechtschreibung. Finde jetzt selbst heraus ... –

Antwort

4

Es ist „Februar“, nicht „Febuary“

+0

Nun, das ist meine oberste dumme Frage, lol, danke :) –

+0

@Tom Gullen: kein Problem, wir haben alle unsere Momente ...;) – sjngm

0

Ich würde das nicht immer tun: wenn das Standarddatumsformat in der Datenbank ändert, dann sind Sie zum Scheitern gebracht. Stattdessen werfen immer Strings Daten explizit, so dass Sie die Kontrolle behalten:

UPDATE tblCampaigns SET startDate = convert(datetime, '20101204', 112) 

http://msdn.microsoft.com/en-us/library/aa226054(v=SQL.80).aspx

+0

Ich habe die Angewohnheit, Daten einzufügen Auf meine Art und Weise, weil sie nicht anders interpretiert werden können, bereitet das Schreiben eines Skripts auf einem UK-Server, der auf einer US-Datenbank läuft, große Kopfschmerzen, wenn Tage/Monate unterschiedlich interpretiert werden. Ist das eine schlechte Übung? –

+1

Das meine ich: Wenn Sie der Datenbank mitteilen, dass '20101204' als 'yyyymmdd' interpretiert werden soll (die Bedeutung von Stil 112), dann hat die Datenbank keine andere Wahl. Wenn Sie zum Beispiel Ihre Skripts auf einem deutschen Server laufen lassen mussten, würde "Dezember" einen Fehler verursachen, da der Server "Dezember" erwartet. – davek

+2

Mit deutschem System bekomme ich nur Kopfschmerzen, die sie nicht über JJJJ-MM-TT wissen, aber soweit ich weiß, verstehen alle Versionen von SQL Server JJJJMMT ohne weitere Einstellungen. Das bedeutet, dass es nicht nötig ist, convert (datetime, '20101204', 112) anstelle von '20101204' zu verwenden. –