Top-Themen

Aktuelle Themen (A bis Z)

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

SQL liefert falsche Werte bei IS NULL

Mitglied: lombaseggel

lombaseggel (Level 1) - Jetzt verbinden

19.06.2009, aktualisiert 10:28 Uhr, 3873 Aufrufe, 11 Kommentare

Hallo alle zusammen,

wir haben hier ein mittelgroßes Problem und eins vorweg, ich bin alles andere als ein SQL Profi
Wir benutzen Access schon seit ein paar Jahren um auf unserem MS SQL 2000 Server Abfragen zu erstellen.
In letzter Zeit haben wir ab und zu mal bei einer monatlichen Abfrage das Phenomen das falsche Werte geliefert werden.

Die Sicht beinhaltet das Kriterium FELD1 = IS NULL
d.h. nur die Datensätze bei denen kein Wert eingetragen ist sollen in einem späteren Schritt angezeigt werden.
Ab und zu rutscht aber immer wieder ein Feld rein das aber einen Wert enthällt!
Ich finde dann auf dem Ausdruck der Datensätze, vereinzelt welche bei denen das Feld einen Inhalt hat, und das teilweise schon seit Jahren.

Wir kann das sein? Hat jemand von euch eine Idee wo hier evnt das Problem verborgen sein könnte? Kann der SQL sich z.B "verschlucken"? Die Abfragen sind sehr groß und erstrecken sich über ca 45.000 Datensätze. Leider ist unser Entwickler der das "System" entwickelt hat nicht mehr im Unternehmen.

Über Ideen würde ich mich freuen den ich bin am Ende mit meinem Latein.

Vielen Dank für eure Hilfe
Mitglied: Biber
19.06.2009 um 10:44 Uhr
Moin lombaseggel,

willkommen im Forum.

Auch wenn ich fest davon ausgehen, dass "FELD1 = IS NULL" ein Tippfehler ist und in Wirklichkeit "FELD1 IS NULL" dort steht - bitte poste doch die Abfrage.

Das Access eventuell Datensätze verschluckt, nur weil das irgendwelche Redmonder zusammengeschrotet haben - nein, das können wir ausschließen.


Grüße
Biber
Bitte warten ..
Mitglied: lombaseggel
19.06.2009 um 10:49 Uhr
Danke schon mal für die Antwort,
ja es war ein Tippfehler Es geht um die SageBelegnummer

hier der Syntax:

SELECT dbo.MT_Zertifikate.Zert_Nr, dbo.MT_Zertifikate.Ausgang, dbo.MT_Zertifikate.Zertifizierdatum, dbo.MT_Zertifikate.Zertifikatstyp,
dbo.MT_Zertifikate.SageBelegnummer, dbo.getsamount(dbo.MT_Zertifikate.Zertifikatstyp) AS [Amount S], dbo.MT_Zertifikate.LaborID,
dbo.MT_Zertifikate.LocalProjectNo, dbo.MT_Zertifikate.S_Number, dbo.MT_Zertifikatstyp.Beschreibung, dbo.MT_Zertifikate.ZID,
dbo.MT_Zertifikate.ProductID, dbo.MT_Zertifikate.gültig_bis, dbo.MT_Zertifikate.Zurückziehdatum, dbo.MT_Zertifikate.Produktbez_engl,
dbo.MT_Zertifikate.Typ_eng, dbo.MT_Adressen.AdressID, dbo.MT_Adressen.Abkürzung, dbo.MT_Zertifikate.ModSpecial
FROM dbo.MT_Zertifikate INNER JOIN
dbo.MT_Zertifikatstyp ON dbo.MT_Zertifikate.Zertifikatstyp = dbo.MT_Zertifikatstyp.Zertifikatstyp INNER JOIN
dbo.MT_Auftrag ON dbo.MT_Zertifikate.AID = dbo.MT_Auftrag.AID INNER JOIN
dbo.MT_Adressen ON dbo.MT_Auftrag.KID = dbo.MT_Adressen.AdressID
WHERE (dbo.MT_Zertifikate.Ausgang IS NOT NULL) AND (dbo.MT_Zertifikate.Zertifizierdatum >= CONVERT(DATETIME, '2006-01-01 00:00:00', 102)) AND
(dbo.MT_Zertifikate.SageBelegnummer IS NULL) AND (dbo.MT_Zertifikate.Zertifikatstyp = 1 OR
dbo.MT_Zertifikate.Zertifikatstyp = 6 OR
dbo.MT_Zertifikate.Zertifikatstyp = 2 OR
dbo.MT_Zertifikate.Zertifikatstyp = 8 OR
dbo.MT_Zertifikate.Zertifikatstyp = 9 OR
dbo.MT_Zertifikate.Zertifikatstyp = 12 OR
dbo.MT_Zertifikate.Zertifikatstyp = 10 OR
dbo.MT_Zertifikate.Zertifikatstyp = 11 OR
dbo.MT_Zertifikate.Zertifikatstyp = 13 OR
dbo.MT_Zertifikate.Zertifikatstyp = 14 OR
dbo.MT_Zertifikate.Zertifikatstyp = 7 OR
dbo.MT_Zertifikate.Zertifikatstyp = 5 OR
dbo.MT_Zertifikate.Zertifikatstyp = 16 OR
dbo.MT_Zertifikate.Zertifikatstyp = 15 OR
dbo.MT_Zertifikate.Zertifikatstyp = 18 OR
dbo.MT_Zertifikate.Zertifikatstyp = 3 OR
dbo.MT_Zertifikate.Zertifikatstyp = 19)
Bitte warten ..
Mitglied: dog
19.06.2009 um 11:13 Uhr
Ich hab mir das SQL zwar noch nicht angeschaut aber zwei Dinge vorweg:

1. NULL und "Feld ist leer" sind zwei verschiedene Dinge. NULL ist ein konkreter Feldwert, eine Prüfung auf "Leer" sähe anders aus.

2. Dein SQL etwas geordnet

01.
SELECT  
02.
	dbo.MT_Zertifikate.Zert_Nr,  
03.
	dbo.MT_Zertifikate.Ausgang,  
04.
	dbo.MT_Zertifikate.Zertifizierdatum,  
05.
	dbo.MT_Zertifikate.Zertifikatstyp, 
06.
	dbo.MT_Zertifikate.SageBelegnummer, 
07.
	dbo.getsamount(dbo.MT_Zertifikate.Zertifikatstyp) AS [Amount S],  
08.
	dbo.MT_Zertifikate.LaborID, 
09.
	dbo.MT_Zertifikate.LocalProjectNo,  
10.
	dbo.MT_Zertifikate.S_Number,  
11.
	dbo.MT_Zertifikatstyp.Beschreibung,  
12.
	dbo.MT_Zertifikate.ZID, 
13.
	dbo.MT_Zertifikate.ProductID,  
14.
	dbo.MT_Zertifikate.gültig_bis,  
15.
	dbo.MT_Zertifikate.Zurückziehdatum,  
16.
	dbo.MT_Zertifikate.Produktbez_engl, 
17.
	dbo.MT_Zertifikate.Typ_eng,  
18.
	dbo.MT_Adressen.AdressID,  
19.
	dbo.MT_Adressen.Abkürzung,  
20.
	dbo.MT_Zertifikate.ModSpecial 
21.
FROM  
22.
	dbo.MT_Zertifikate  
23.
INNER JOIN 
24.
	dbo.MT_Zertifikatstyp ON dbo.MT_Zertifikate.Zertifikatstyp = dbo.MT_Zertifikatstyp.Zertifikatstyp  
25.
INNER JOIN 
26.
	dbo.MT_Auftrag ON dbo.MT_Zertifikate.AID = dbo.MT_Auftrag.AID  
27.
INNER JOIN 
28.
	dbo.MT_Adressen ON dbo.MT_Auftrag.KID = dbo.MT_Adressen.AdressID 
29.
WHERE  
30.
	(dbo.MT_Zertifikate.Ausgang IS NOT NULL)  
31.
	AND  
32.
		(dbo.MT_Zertifikate.Zertifizierdatum >= CONVERT(DATETIME, '2006-01-01 00:00:00', 102))  
33.
		AND 
34.
			(dbo.MT_Zertifikate.SageBelegnummer IS NULL)  
35.
			AND  
36.
37.
					dbo.MT_Zertifikate.Zertifikatstyp = 1 OR 
38.
					dbo.MT_Zertifikate.Zertifikatstyp = 6 OR 
39.
					dbo.MT_Zertifikate.Zertifikatstyp = 2 OR 
40.
					dbo.MT_Zertifikate.Zertifikatstyp = 8 OR 
41.
					dbo.MT_Zertifikate.Zertifikatstyp = 9 OR 
42.
					dbo.MT_Zertifikate.Zertifikatstyp = 12 OR 
43.
					dbo.MT_Zertifikate.Zertifikatstyp = 10 OR 
44.
					dbo.MT_Zertifikate.Zertifikatstyp = 11 OR 
45.
					dbo.MT_Zertifikate.Zertifikatstyp = 13 OR 
46.
					dbo.MT_Zertifikate.Zertifikatstyp = 14 OR 
47.
					dbo.MT_Zertifikate.Zertifikatstyp = 7 OR 
48.
					dbo.MT_Zertifikate.Zertifikatstyp = 5 OR 
49.
					dbo.MT_Zertifikate.Zertifikatstyp = 16 OR 
50.
					dbo.MT_Zertifikate.Zertifikatstyp = 15 OR 
51.
					dbo.MT_Zertifikate.Zertifikatstyp = 18 OR 
52.
					dbo.MT_Zertifikate.Zertifikatstyp = 3 OR 
53.
					dbo.MT_Zertifikate.Zertifikatstyp = 19 
54.
				)
Grüße

Max
Bitte warten ..
Mitglied: lombaseggel
19.06.2009 um 11:18 Uhr
Ups, das mit der Formatierungshilfe ist mir absolut entgangen! Danke

Ok ich als SQL Laie dachte IS NULL bedeutet das Feld ist leer,
wenn IS NULL einen bestimmten Wert vorgibt könnte die Ursache darin liegen!?
Bitte warten ..
Mitglied: dog
19.06.2009 um 12:36 Uhr
Also prinzipiell sollte es nicht vorkommen, dass eine Spalte die mit "IS NULL" gebunden ist im Ergebnis konkrete Werte vorkommen.
Wenn du nur einmal folgenden Query ausführst, gibt es dann immer noch Spalten mit Werten?
SELECT * FRPM dbo.MT_Zertifikate WHERE SageBelegnummer IS NULL 
Welchen Spaltentyp hat SageBelegnummer?

Grüße

Max
Bitte warten ..
Mitglied: lombaseggel
19.06.2009 um 12:54 Uhr
Wenn ich die aktuelle Abfrage ausführe erscheinen auch keine Datensätze bei denen im Sage Feld etwas steht.
Das passiert nur sporadisch. Auch deine Abfrage liefert keine "falschen" Werte.

Der Datentyp ist nvarchar

Danke Gruss Marc
Bitte warten ..
Mitglied: filippg
20.06.2009 um 03:30 Uhr
Jaa... dann ändere doch eine Anfrage mal in (NOT ((dbo.MT_Zertifikate.Ausgang IS NULL) OR (dbo.MT_Zertifikate.Ausgang = '')))

Gruß

Filipp

PS: dieses NULL-Ding ist echt Teufelszeug, ich bin dem auch schon oft genug aufgesessen.
Bitte warten ..
Mitglied: lombaseggel
22.06.2009 um 10:13 Uhr
Das Problem bezog sich auf das Sagefeld das leer sein muss für diese Art von Vorgang.
Analog dazu:
(NOT ((dbo.MT_Zertifikate.Sage IS NULL) OR (dbo.MT_Zertifikate.Sage = '')))
?
Kannst du mir evnt etwas mehr erklären warum das NULL, Probleme macht/machen kann in deinen Augen?
Bzw worin jetzt genau der Unterschied liegt in der Behandlung von SQL Sicht aus.
Danke

gruss marc
Bitte warten ..
Mitglied: filippg
22.06.2009 um 14:45 Uhr
Zitat von lombaseggel:
Kannst du mir evnt etwas mehr erklären warum das NULL, Probleme
macht/machen kann in deinen Augen?
Ich dachte, das hättest du gerade selber festgestellt.
Fies finde ich etwa:
SELECT * FROM bla WHERE x = 5
Welche Abfrage liefert dann alle anderen Zeilen?
SELECT * FROM bla WHERE x != 5
würde man denken, ist aber natürlich falsch - wenn die Spalte x Null erlaubt.

Grundsätzlich hat man sich eine Bimodale Logik angewöhnt - es gibt TRUE oder FALSE, 0 oder 1, mehr nicht. NULL macht jetzt wieder ein Trimodale Logik daraus, neben True und False ist auf einmal Unknown erlaubt. Und das muss man halt bei jedem Query beachten. Und auch wenn man Funktionen oder gespeicherte Prozeduren nutzt muss man immer erstmal schauen, wie die sich bei NULL verhalten.
Um den Spaß zu erhöhen kann man im SQL-Server verschiedene Settings vornehmen, die das Verhalten (u.a.) bezgl. Null ändern. Damit ist dann z.B. wieder die (nicht ganz unintuitive) Klausel "x = NULL" zulässig, die vorher zwar keinen Syntaxfehler darstellt, aber leider keine Werte liefert.

Gruß

Filipp
Bitte warten ..
Mitglied: Biber
26.06.2009 um 00:28 Uhr
Öhhm, lombaseggel,

wie ist denn der gefühlte Status Deines Beitrags?

Sind noch Fragen offen, kann ein kleiner grüner Haken dran oder muss alles noch etwas reifen?

Gib doch mal Feedback bitte

Danke
Biber
Bitte warten ..
Mitglied: lombaseggel
26.06.2009 um 09:40 Uhr
muss noch etwas "reifen" wir sind leider noch nicht zur Umsetzung gekommen

Danke Gruss Marc
Bitte warten ..
Ähnliche Inhalte
Microsoft Office
DateDiff liefert unteschiedliche Werte
gelöst Frage von GundelputzMicrosoft Office3 Kommentare

Hallo alle zusammen, habe hier ein merkwürdiges verhalten von Excel 2010 VBA Ich möchte die differenz von zwei Datumswerten ...

Windows Server
Völlig falsche Werte nach gpupdate
Frage von ofodagWindows Server4 Kommentare

Hallo zusammen, ich habe folgendes Problem bei einem einzigen Server. Ich habe eine Policy bzgl. WSUS die auch bei ...

Microsoft Office

Beim Null Wert in der Zelle komplette Zeile nicht drucken

gelöst Frage von wingetMicrosoft Office6 Kommentare

Hallo zusammen, ich suche nach einer Lösung (gerne auch VBA) für folgenes Problem. Beispiel: Wenn z.B.die Zellen D2, D6, ...

Microsoft Office

Kein Wert beim Sortieren, bzw NV wird nicht als NULL angezeigt

Frage von Inge88Microsoft Office

Ein feierabendliches Hallöchen an Alle, langsam steigere ich mich komme aber ständig an meine Grenzen :-) :-( Ich haben ...

Neue Wissensbeiträge
Windows 10

Neue Sicherheitslücke in Windows 10 (Version 1709) durch Google öffentlich geworden

Information von kgborn vor 12 StundenWindows 10

Vor ein paar Tagen haben Googles Sicherheitsforscher vom Projekt Zero eine Sicherheitslücke im Edge-Browser publiziert. Jetzt wurde eine weitere ...

iOS
IOS 11.2.6 verfügbar
Information von sabines vor 18 StundeniOS

Mit dem Update soll der Bug behoben werden, bei dem eine bestimmte Zeichenkette IOS zum Absturz gebracht hat.

Sicherheit
Sicherheitsrisiko: Die Krux mit 7-Zip
Information von kgborn vor 1 TagSicherheit8 Kommentare

Bei vielen Anwendern ist das Tool 7-Zip zum Entpacken von Archivdateien im Einsatz. Die Software ist kostenlos und steht ...

Internet

Datendealing im WWW Tracking Methoden immer brutaler

Information von sabines vor 1 TagInternet

Interessanter Artikel zum Thema Tracking im WWW und die immer "besseren" Methoden des Trackings. Professor Arvind Narayanan (Princeton-Universität) betreibt ...

Heiß diskutierte Inhalte
Router & Routing
LANCOM VPN CLIENT einrichten
Frage von Finchen961988Router & Routing27 Kommentare

Hallo, ich habe ein Problem und hoffe ihr könnt mir helfen, wir haben einen Kunden der hat einen Speedport ...

Windows Server
AD DS findet Domäne nicht, behebbar?
Frage von schapitzWindows Server25 Kommentare

Guten Tag, ich habe bei einem Kunden ein Problem mit den AD DS. Umgebung ist folgende: Windows Server 2016 ...

LAN, WAN, Wireless
VPN Cisco ASA5505 PaloAlto PA-200
gelöst Frage von YannoschLAN, WAN, Wireless22 Kommentare

Hallo zusammen, ich würde gerne ein Site-to-Site VPN zwischen den beiden Standorten aufbauen. PaloAlto PA200 Internetanschluss Deutsche Telekom GK ...

SAN, NAS, DAS
Qnap TS-453S Pro - Anbindung Active Directory
Frage von JuckieSAN, NAS, DAS13 Kommentare

Hallo zusammen, ich habe hier eine Qnap TS-453S Pro die sich mal so absolut gar nicht in das Active ...