Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Arithmetic overflow error converting expression to data type datetime

Frage Entwicklung Datenbanken

Mitglied: Praktikantin

Praktikantin (Level 1) - Jetzt verbinden

02.07.2008, aktualisiert 03.07.2008, 7049 Aufrufe, 5 Kommentare

Hallo Leute,

ich habe dieses SQL Query:



select p.*,s.up_inv_id, s.GLN_delivery,s.inv_type, s.inv_seq, s.inv_number,s.invoice_date, s.status
into #cancelling_invoices
from up_status as s
inner join #partners as p
on dbo.remove_lead_zeros(s.afm_sender) = dbo.remove_lead_zeros(p.sender_afm)
and dbo.remove_lead_zeros(s.afm_retailer) = dbo.remove_lead_zeros(p.retailer_afm)
where CONVERT(varchar(8)month(invoice_date) = case
when datepart(m,getdate()) between 2 and 12
then datepart(m,getdate())-1
when datepart(m,getdate()) = 1
then 12
end
and year(invoice_date) =case
when datepart(m,getdate()) between 2 and 12
then datepart(yyyy,getdate())
when datepart(m,getdate()) = 1
then datepart(yyyy,getdate())-1
end
and status = 'Cancelling invoice'-- or status = 'No invoice lines in file')
--and inv_type in ('31','32','33','34')
--and up_inv_id <> 0
order by p.sender_name,retailer_name,sender_afm,retailer_afm


Bis vor 2 Monaten lief alles normal, aber jetzt kommt der Fehler:

Server: Msg 8115, Level 16, State 2, Line 1
Arithmetic overflow error converting expression to data type datetime.
The statement has been terminated.


Invoice_date ist ein nvarchar(8). Jetzt läuft es nicht mehr und auch der ganze Job nicht . Wie gesagt, bis vor kurzem lief alles ganz normal. Hat da jemmand eine Idee?

Vielen dank

Julia
Mitglied: Biber
02.07.2008 um 18:32 Uhr
Moin Praktikantin,

Invoice_date ist ein nvarchar(8)
... in dem alle möglichen Prosatexte drinstehen können, so z.B. "1.4." , "Ostern" oder "32.45.2008"

dann prüfe doch zuerst den Inhalt des invoice-"date"-Feldes separat (unabhängig von dieser Query) auf Datenqualität. Also darauf, in wie vielen Fällen ein Nicht-In-Datumswerte-übersetzbarer Wert darin steht.

Danach druckst Du das Datenmodell auf einem DIN A0-Plotter aus, rollst es sorgfältig ganz eng zusammen, schiebst ins Innere eine Stahlrute und haust das ganze demjenigen um die Ohren, der das Datumsfeld als varchar(8) angelegt hat.

Grüße
Biber
Bitte warten ..
Mitglied: Praktikantin
02.07.2008 um 18:58 Uhr
Hallo Biber,

da hast Du recht!!!! Deine Ratschläge sind Gold Wert!!!! Diese Datenbank ist wirklich schlimm!! Fast alle Felder sind nvarchar. Sogar die Preise und Prozente. Daran muss es wohl liegen. Jemmand hat einen Falschen Wert eingeben, deswegen läuft das Query erst einmal und nach 2-3 kommt dieser Fehler. Soll ich das Invoice_date mit cast als Datetime konvertieren? Danke nochmal.

Viele Grüße

Julia
Bitte warten ..
Mitglied: Biber
02.07.2008 um 19:54 Uhr
Moin Praktikantin,

Fast alle Felder sind nvarchar. Sogar die Preise und Prozente..
Noch mal eine Kopie des Datenmodells auf DIN A3 drucken.
Diesmal Baseballschläger statt Stahlrute.
Soll ich das Invoice_date mit cast als Datetime konvertieren?
*seufz*.... wozu?? Das hilft doch nur von einer Query heute nachmittag zur nächsten Query morgen früh...

--> Da musst Du - und zwar BEVOR irgendein Depp dieses zusammengeschlamperte Gebilde produktiv setzen will DRINGENDST konsolidieren (lassen). Numerische Werte in varchar()-Feldern sind von der Geschwindigkeit grenzwertig und Datumswerte in einem Lyrik-Feld sind fast schon Sabotage. Das kostet Zeit und Geld, selbst wenn die Queries ohne Abbrüche laufen würden. Performance. CPU-Zeit. Timeouts. Mitarbeiter, die eine DB-Abfrage starten und dann erstmal einen Kaffee aufsetzen. Mails und Faxe mit :"Sacht ma, ist Eure Datenbank offline?" usw usw.

Die Möglichkeiten OHNE Redesign/Konsolidierung/Datentyp-Anpassung sind schnell aufgezählt:

  • die ganzen "falschen" nvarchar()-Felder so lassen: dann muss aber irgendeine GUI bei der Eingabe/beim Datenimport die Datenqualität sicherstellen. Auf deutsch: Muss programmiert werden. (Und da würde es bei mír aussetzen, wenn ein Java/PHP-Coder dann eine Methode schreiben soll mit "ist der Monat auch zwischen 1 und 12" und "sind die Tage im Februar kleiner als 30" und wann haben wir Schaltjahre"? Dat is schon erfunden.... dafür gibt es Datums-Datentypen)
  • Du kannst über alle (physischen) Tabellen (1:1) Views legen, in denen die Datentypen (jeden gottverdammten Tag aufs Neue) gecastet werden und hast dadurch keine Abbrüche mehr in den Queries, die diese Views verwenden-
  • oder - schlechteste Möglichkeit, weil nicht pflegbar und Stückwerk: Du kannst so wie jetzt in irgendwelchen auffällig gewordenen Queries ein bisschen punktuell rumcasten. (ist absoluter Dreck, so eine Arbeitsweise)

---> Lass es eskalieren! Wenn das DB-Design so unbrauchbar ist, dann MUSS eine strukturelle Anpassung erfolgen.
Wenn sie Dich feuern und Du rothaarig bist, kannst Du auch...

Grüße
Biber
Bitte warten ..
Mitglied: Praktikantin
02.07.2008 um 20:16 Uhr
Ok, hast ja Recht. Ich denke fürs erste werde ich ein paar views benutzen. Ich werde unserem Vorgesetzten darauf hinweisen. Hast Recht die Querys dauern immer sehr lange und nichts läuft wie es soll. Ausserdem wird Mapforce (das schlimmste Tool überhaupt) zum importieren benutzt... Ich werde mich wohl selbst feuern...
Danke für alles

Julia, mit den Braunen Haaren
Bitte warten ..
Mitglied: Praktikantin
03.07.2008 um 15:51 Uhr
Hallo Biber,

Deine Tipps sind wirklich Gold Wert!!!!! Ich kann Dir einfach nicht genug danken!!!! Ich habe ein View erstellt und dann lief das Query!!! Du bist die Nummer 1!! Ich habe das alles unserem Vorgesetzten erzählt, aber alle sind wohl zu faul.... Na ja, danke für alles!!!!

Viele liebe Grüße

Julia
Bitte warten ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

Ähnliche Inhalte
Windows 8
gelöst Active Directory Default User.v2 Profile - Windows 8.1 Apps Error (4)

Frage von adm2015 zum Thema Windows 8 ...

Debian
Www-data in ein CIFS Share Daten schreiben lassen? (3)

Frage von Jens4ever zum Thema Debian ...

Windows Server
Daten löschen - Windows Error Reporting (WER) (2)

Frage von Otto1699 zum Thema Windows Server ...

Heiß diskutierte Inhalte
Windows Server
DHCP Server switchen (25)

Frage von M.Marz zum Thema Windows Server ...

SAN, NAS, DAS
gelöst HP-Proliant Microserver Betriebssystem (14)

Frage von Yannosch zum Thema SAN, NAS, DAS ...

Grafikkarten & Monitore
Win 10 Grafikkarte Crash von Software? (13)

Frage von Marabunta zum Thema Grafikkarten & Monitore ...

Windows 7
Verteillösung für IT-Raum benötigt (12)

Frage von TheM-Man zum Thema Windows 7 ...