Gast alexC++ Geschrieben 20. November 2008 Teilen Geschrieben 20. November 2008 Hallo, habe 2 identische mssql-datenbanken auf 2 unterschiedlichen servern und 2 gleiche abfragen, die ich auf den beiden servern laufen lasse. siehe hier: -- Nummer 1 Select NextVar129=case when (max(var129) + 1) is null then '300000000' else max(var129) + 1 end from sysadm.hi0 where var129 between 300000000 and 399999999 -- Nummer 2 Select NextVar129=case when (max(var129) + 1) is null then '300000000' else max(var129) + 1 end from sysadm.hi0 where var129 between '300000000' and '399999999' Einmal mit Hockomme und einmal ohne. var129 ist ein varchar(30) (natürlich auch auf beiden servern(datenbanken) ich bekomme auf dem einen server für beide abfragen den selben wert und auf dem anderen server 2 unterschiedliche werte. es muss dann wohl an einer server-einstellung liegen, da ja sonst die beiden abfragen auf beiden servern dasgleiche ergebnis liefern müssten. liege ich da richtig, wenn ja was für eine einstellung ist das! bitte um hilfe!! Gruß Alex Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Goos Geschrieben 20. November 2008 Teilen Geschrieben 20. November 2008 Oha, sollen wir nun wieder die Glaskugeln rausholen? Du hast ja noch nichtmal gesagt, ob es die gleichen Serverversionen sind, ob es die gleichen Datenbestaende sind und welche Werte du im einzelnen erhaeltst. Abgesehen davon hast auch noch nicht erzaehlt, was du erreichen willst. Vielleicht mags ja viel schoenere Loesungen geben Goos Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Gast alexC++ Geschrieben 20. November 2008 Teilen Geschrieben 20. November 2008 auf beiden sql server 2005 ( der 1ste hat service pack 1 und der andere service pack 2) service pack 1 gleich und service pack 2 unterschiedlich es sind auf den beiden servern unterschiedlich viele datensätze vorhanden. was aber keine rolle spielt, da ja die beiden werte für die 2 abfragen beim einen server gleich sind und beim anderen nicht. ich will erreichen, dass der max-wert um 1 addiert wird Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
flashpixx Geschrieben 20. November 2008 Teilen Geschrieben 20. November 2008 Ich kann jetzt das nur aus Postgres sagen, da gibt es "max" um den maximalen Wert einer Spalte zu bekommen oder wenn es eine Sequenz ist "current_id", die für die aktuelle Session die ID liefert bzw "next_id", die eine eindeutige ID (currid+1) liefert, so dass sich die Benutzer gegenseitig nicht in die Quere kommen. Aber SQL / Datenbanken sind bei so etwas durchaus unterschiedlich, ich gehe mal von einem MS SQL (-> Handbuch lesen) Phil Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Goos Geschrieben 20. November 2008 Teilen Geschrieben 20. November 2008 Na gut, erstens hoert sich das fuer mich an als wuerdest du eine Autoinkrementspalte selbst erzeugen wollen. Dazu solltest dann vielleicht mal unter Identity Columns in den BOL nachlesen. Weshalb du bei deinen Statements durchaus unterschiedliche Werte erhalten kannst ist schnell erklaert. Du hast Zahlen in einer varchar Spalte stehen und vergleichst diese auf unterschiedliche Arten. Beim ersten wird dein var129 implizit nach int gecastet und dann mit der 300000000 und der 399999999 verglichen. Beim zweiten Beispiel machst du einen alphanumerischen Vergleich. Dort fallen dir also evtl. auch Werte in den Bereich, die rein numerisch betrachtet dort nicht hingehoeren. Abgesehen von alledem bekommst du Fehler sobald in der var129 Spalte mal kein nach int castbarer Wert enthalten ist. Dein Design ist an der Stelle also nuja, sagen wir mal etwas suboptimal. Falls du wirklich etwas in der Art machen willst, dann mach bitte falls irgendwie moeglich aus var129 eine int, oder bigint Spalte. Goos Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
dr.dimitri Geschrieben 20. November 2008 Teilen Geschrieben 20. November 2008 Crosspost Dim Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Gast alexC++ Geschrieben 21. November 2008 Teilen Geschrieben 21. November 2008 das feld wird mittels programm befüllt. es sollten dann nur zahlen drin stehen. ich weiß nicht, warum dieses feld benutzt wurde, habe damit nix zu tun. ich werde aber mal darauf hinweisen. danke für die Hilfe! Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
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.