Borinator Geschrieben 6. Juli 2009 Geschrieben 6. Juli 2009 Hallo zusammen ich hab die aufgabe eine firebird datenbank in ein ms-sql-server2008 zu portieren. ich hab ein script geschrieben das mir die ganzen tabellen mit schlüssel anlegt. Nun verzweifle ich aber an einer UDF. unzwar muss ich eine Funktion schreiben die 4 datensätze aus der tabelle liest und den kleinen wert zurück liefert. ich hab es erst mit der Funktion min() versucht die aber einen argument braucht und ich weiß da wirklich nicht was ich übergeben soll. Dann hab ich was anderes versucht was aber nicht das macht was es machen soll .... hier der code Bei meiner Funktion muss ich die zahlen selber eintippen, das soll aber nicht so sein er soll die zahlen selber aus der datenbank lesen. Ich danke schon vorraus für jede Hilfe die mich weiter bringt und die es auch nicht tut;) CREATE FUNCTION [dbo].[VZA_MIN] (@zahl1 as INTEGER, @zahl2 as integer, @zahl3 as integer, @zahl4 as integer ) RETURNS INTEGER AS BEGIN /* Funktionskörper */ declare @min AS INTEGER --declare @zahl1 as INTEGER, @zahl2 as integer, @zahl3 as integer, @zahl4 as integer if(@zahl1<=@zahl2) and (@zahl1<=@zahl3) and(@zahl1 <= @zahl4) set @min = @zahl1 if (@zahl2<= @zahl1) and(@zahl2 <= @zahl3) and(@zahl3<=@zahl4) set @min = @zahl2 if (@zahl3<=@zahl1) and (@zahl3<=@zahl2) and(@zahl3<=@zahl4) set @min = @zahl3 if (@zahl4<=@zahl1) and (@zahl4<=@zahl2) and(@zahl4<=@zahl3) set @min = @zahl4 return @min END falls einer ein tool kennt welches mit eine firebird datenbank in ms-sql exportiert dann nur her damit^^ Zitieren
T3D Geschrieben 6. Juli 2009 Geschrieben 6. Juli 2009 Dein 4 Datensaetze muessen ja irgendeine gemeinsamkeit haben, oder? Wenn ja SELECT MIN(zahl) FROM tabelle GROUP BY gemeinsamkeit Wenn nein musst du auf eine andere Antwort warten Zitieren
Borinator Geschrieben 6. Juli 2009 Autor Geschrieben 6. Juli 2009 Wie du das meinst geht auch aber dann muss ich für jede Tabelle diese Abfrage immer neu schreiben. Ich brauche eine Funktion die mir den kleinsten wert returned. z.B hab ich in eine zeile 4 wert 4221 ------------- 2 ----------- 312 ------------ 23 dann würde es mir die 2 zurückgeben Zitieren
Amstelchen Geschrieben 6. Juli 2009 Geschrieben 6. Juli 2009 Bei meiner Funktion muss ich die zahlen selber eintippen, das soll aber nicht so sein er soll die zahlen selber aus der datenbank lesen. bevorzugt sollte man das, was mit reinem SQL möglich ist, auch mit SQL machen und nicht mit UDFs resp (oder dort eben SQL verwenden und nichts "händisch eintippen"). deswegen SQL mit SELECT. hab ich in eine zeile 4 wert du hast 4 einzelne felder in der tabelle, richtig? MIN() liefert den minimalen wert einer menge von zeilen. wenn du das minimun von vier feldern benötigst, musstest du die reihen in zeilen wandeln. das kannst du entweder mittels UNPIVOT oder OVER ... PARTITION machen. falls einer ein tool kennt welches mit eine firebird datenbank in ms-sql exportiert dann nur her damit^^ ab einer gewissen komplexität der datenbank wird selbst ein universelles tool, welches datenbanken migriert, seine grenzen erreichen. die eierlegende wollmilchsau gibt es nicht, aber vielleicht verrätst du ja mal, wie komplex die firebird-datenbank ist. s'Amstel Zitieren
Borinator Geschrieben 7. Juli 2009 Autor Geschrieben 7. Juli 2009 Erstmal danke für die schnell Antwort:) Ich habe meinen fehler behoben meine Funktion funktioniert:P nur als die Datenbank meine Funktion gespeichert hat hat er ihr die bezeichnung dbo.VZA_MIN gegeben und ich habe immer versucht sie mit VZA_MIN aufzurufen :upps Jetzt stehen aufjedenfalls all meine Views bis auf eins, es wäre GENIAL wenn ihr mir da weiterhelfen könntet^^ und zwar hab ich einen cast: CAST(<ausdruck1> | <ausdruck2> | <ausdruck3> as varchar(100)) die ausdrucke sind alle vom typ varchar(254) jetzt gibt er mir die fehlermeldung : 'Die Datentypen varchar und varchar sind im "|" - Operator inkompatible' Hat da einer ne idee wie ich das lösen könnte?? Zitieren
Amstelchen Geschrieben 7. Juli 2009 Geschrieben 7. Juli 2009 CAST(<ausdruck1> | <ausdruck2> | <ausdruck3> as varchar(100)) 'Die Datentypen varchar und varchar sind im "|" - Operator inkompatible' 2 sekunden recherche: Jeder gültige Ausdruck von einem Datentyp aus der ganzzahligen Datentypkategorie oder die Datentypen bit, binary oder varbinary. expression wird für die bitweise Operation als binäre Zahl behandelt. Bei einer bitweisen Operation kann nur ein expression vom Datentyp binary oder varbinary sein. alles klar? s'Amstel Zitieren
Borinator Geschrieben 8. Juli 2009 Autor Geschrieben 8. Juli 2009 DANKKKEEEEEEE für die schnelle Antwort.... Hab jetzt die Datentypen geändert und nun tut es auch danke sehr:uli Zitieren
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.