Zum Inhalt springen

If-Anweisung schlägt fehl


net-tobi

Empfohlene Beiträge

Hallo zusammen

Ich habe ein problem mit einer If-Anweisung, hier schlägt der vergleich fehl.

Als ergebnis bekomme ich immer false.

Nun aber zu den Fakten damit ihr hier nicht in die Glaskugel schauen müsst. :)

Die Datenbank läuft auf einen SQL Server 2005 und die Management Console.

Ich schreibe auch hier die Abfrage. Ziel der Abfrage ist es aus 3 Tabellen 2 Variablen zu füllen die dann Verglichen werden sollen über die If anweisung.

Die erste Tabelle durchlaufe ich mit einem cursor und hole mir ein Objekt, mit diesen suche ich dann in den anderen beiden Tabellen und fülle die beiden Variablen. Nennen wir sie V1 und V2

Die Anweisung lautet wie folgt:

IF V1 = V2

@zähler = @zähler +1

Der Zähler soll dann am schluss das Ergebnis mit den gleichen Datensätzen anzeigen.

Das füllen der Variablen klappt problemlos. Nur an der If Anweisung verzeiflich langsam. Denn egal wie die Variablen sind hält das Script sie immer für ungleich. Ach ja die Variablen sind alle mit nvarchar (max) deglariert so sind diese auch in den Tabellen hinterlegt.

Wenn ich mir die Variablen anzeigenlasse, über dir Print Anweisung dann sieht es so aus.

SR SR,

GF GU,

0 Datensätze (Das ergebnis des Vergleiches)

Machen die Kommas was aus? Habe aber auch schon für V1 ein komma mit dazugeschrieben? beispiel: (@V1 = @V1 + ',')

Ich weiß leider nicht mehr wo ich ansetzen soll. Kenn mich in der VBA Programmierung einigermaßen aus und habe auch schon mit Access gearbeitet. Mit T-SQL habe ich erst angefangen.

Ich hoffe ihr könnt mir helfen.

Danke im voraus

net-tobi

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 2 Wochen später...

Hi net-tobi,

mach dir keine Gedanken des If Befehls wegen.

Ein relativ einfaches Select Statement reicht für deine Zwecke aus.

Mit deinem Cursor und der If Abfrage bremst du deine Datenbank nur aus.

Goos

PS: Da du aus der VBA Programmierung kommst, denkst du halt vermutlich noch nicht mengenorientiert. :)

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo Goos

danke fü die Antwort leider brauche ich den Cursor um in dieser Tabelle jeden Datensatz durchsehen muß. Denn hier stehten zwei Sachen die ich dann über den Vergleich mit den Variablen prüfen muß ob diese gleich sind!

Die Lösung des ganzen liegt ganz einfach darin, das die beiden Variabeln nicht gleich lang waren mit den Befehl len habe ich die länge der Variablen geprüft und festegestellt das die ein Variabel um ein Zeichen länger war.

Das Komma so wie ich es schon beschrieben habe.

Als die Lösung lautet hier Set @V1 = @V1 + ','

Warum das das erstemal wie ich es gemacht nicht funktioniert hat, weiß ich nicht.

Danke für euere Hilfe

net-tobi

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hi net-tobi,

du brauchst dafür wirklich keinen Cursor und solltest den an der Stelle auch besser nicht verwenden, dabei bleib ich :)

Wenn du mir mal kurz ein paar Spaltennamen und relevante Werte aus den 3 Tabellen postest, dann mach ich dir dazu auch mal ein passendes Statement.

Vielleicht bringt dich das dann ja beim Thema SQL ein wenig weiter.

Goos

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo Goos

danke für das Angebot. Ich tippe mal das du die Anweisung join in meinst hoffe ich habe es richtig geschrieben.

Das ganze läuft nicht auf einer Produktivdatenbank darum nehme ich es mit der Performenc nicht so eng.

Ich gebe dir da auch recht mit dem das ein Cursor nicht ganz das schnellste ist. Das ganze ist eine Testdatenbank. Die Laufzeit beträgt bei ca. 60 000 Datensätzen ca. 1,5 Stunden.

Wenn du magst kannst du ja mal einfach ein paar beispiel nutzen das ziel wäre dann das mir der Zähler am ende ein Ergebnis ausgibt.

Schönen Abend

net-tobi

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hi net-tobi,

letztendlich ists deine Sache, wie du das machen willst. :)

1,5 Stunden halte ich allerdings für heftigst viel. Das sollte eher eine Sache von Sekunden sein bei 60000 Datensätzen.

Wenn du hier allerdings keine Beispieltabellen posten willst, dann seh ich auch wenig Chancen dir ein entsprechendes Beispielstatement zu präsentieren.

Goos

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich gebe dir da auch recht mit dem das ein Cursor nicht ganz das schnellste ist. Das ganze ist eine Testdatenbank. Die Laufzeit beträgt bei ca. 60 000 Datensätzen ca. 1,5 Stunden.

:eek "Nicht ganz das Schnellste," sagt er. :D

Wenn du magst kannst du ja mal einfach ein paar beispiel nutzen das ziel wäre dann das mir der Zähler am ende ein Ergebnis ausgibt.

Äh... was? Für ein Select-Statement bräuchten wir die Tabellenstruktur und was Du genau haben möchtest.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo zusammen

sorry da ich mich ne Zeit nicht gemeldt habe, war ein bischen eingespannt.

Zu den 1,5h sollte man noch wissen das das ganze (wie gesagt eine TestDB) auf eine Intel Atom N270 mit 1,6 GHz und 2 GB Ram in einer VM läuft die 1 GB zur Verfügung hat. Hätte ich woll noch dazuschreiben müssen. :D

Nun zur Bitte wegen der Tabellenstruktur, musste nochmal die grauen Zellen anstengen wie das ganze zusammen gehört. Hoffe bringe es verständlich rüber. Ihr habt mich da echt neugierig gemacht.

Als Erbenis soll rauskommen wieviel Datensätze in der TabRA die Wert Objekt und UC gleich sind.

So nun geht es los:

T1 (Tabelle1)

TabRA ist die Tabelle die die beiden Werte enthält die verglichen werden sollen, diese könne aber nicht so in der Rohform verglichen werden, also

TabRA enthält Wert Objekt und Wert UC

T2 (Tabelle2)

TabUC enthält die erste Vergleichsvariabele V1 Wert KO diese wird über den Wert UC gesucht aus der TabRA

T3 (Tabelle3)

TabObjekt hier wird über den Wert Objekt aus der TabRA der Wert Art gesucht. (Achtung dieser ändert sich in der nächsten Tabelle T4 !!!)

T4 (Tabelle4)

TabObG hier wird die zweite Vergleichsvariabel V2 gesucht über den Wert IDGR (ist in der T3 der Wert Art)

Sorry sind sogar 4 Tabellen nicht wie Anfangs geschrieben 3!

So ich hoffe es ist verständlich das umänderen der Wert in T3 und T4 dafür kann ich nichts ist so vorgeben.

Ich bin nun auf die Select anweisung gespannt wie ein flitzebogen.

Wünsche euch noch schöne Ostern

net-tobi

Bei Fragen einfach melden ich hoffe ich kann die unklarheiten beseitigen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Moin net-tobi,

ich werd mal versuchen die von die genannten Tabellen und Parameter zu verwenden. So wie du es beschreibst müssen also der wert KO aus Tabelle 2 und ein Wert V2 aus Tabelle 4 für den entsprechenden Datensatz übereinstimmen um gezählt zu werden.

Vom Prinzip her musst du nur all deine Tabellen joinen, auf übereinstimmende Vergleichswerte prüfen und das dann zählen. :)

Es könnte also in etwa folgendermassen ausschaun:

SELECT COUNT(TabUC.KO) --zählen

FROM TabRA 

INNER JOIN TabUC ON TabRA.UC = TabUC.UC    

INNER JOIN TabObjekt ON TabRA.Objekt = TabObjekt.Objekt

INNER JOIN TabObG ON TabObjekt.Art = TabObG.IDGR

WHERE TabUC.KO = TabObG.V2 --vergleichen

Goos

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo Goos

danke für den Code hab ihn zwar noch nicht ausprobiert aber sieht intressant aus.

Mit Inner Join hatte ich also nicht ganz unrecht, dachte gar nicht das der Befehl so mächtig ist.

Aber nochmal doof gefragt erzeugt dies Funktion nun eine Virtuelle Tabelle oder fügt er diese das ganze zu einer Realen Tabelle zusammen?

Danke im voraus

net-tobi

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...