====== Allgemeine SQL-Befehle ====== //Menüpunkt: Werkzeuge > Allgemeine SQL-Befehle \\ Handbuch: MIKE URBAN Model Manager, section 2.11.3: General SQL Command \\ Letzte Änderung mit MIKE URBAN Version 2014 SP3// Diese Seite wird nicht mehr gewartet, weil MIKE URBAN durch unsere aktuelle Software MIKE+ abgelöst worden ist. Bitte wechseln Sie auf die Seite **[[mikeplus:dialog:menue_werkzeuge_sql-befehl|Allgemeiner SQL-Befehl]]**. ===== Einleitung ===== Mit allgemeinen SQL-Befehlen können Sie Modelldaten in beliebiger Art bearbeiten, beispielsweise um den Rohrdurchmesser vom Nenndurchmesser auf den tatsächlichen Innendurchmesser zu ändern, oder um die Rohrrauhigkeit in Abhängigkeit vom Rohrmaterial festzulegen. Sie können mehrere Befehle hintereinander ausführen, und die Befehlssequenz für eine neuerliche Verwendung speichern. ===== Dialogfeld ===== {{ :mikeurban:menue:editor_allgemeinesqlbefehle.png?300 |Klicken zum Vergrößern}} ^ Feld ^ Erklärung ^ |Ausführen |führt die SQL-Befehle aus | |Laden |öffnet eine Textdatei mit SQL-Befehlen | |Speichern |speichert die angezeigten SQL-Befehle zur späteren Verwendung in eine Textdatei | |Schließen |schließt den Editor ohne Ausführung der Befehle | ===== Grundlegende Beispiele ===== Die folgenden Beispiele gelten, wenn die Datenbank im *.mdb-Format (Personal Geodatabase) vorliegt. (a) Alle Zeilen der Tabelle Rohre (mw_pipe) werden aktualisiert, indem die Rauigkeit (rcoeff) mit 1,15 multipliziert wird: UPDATE mw_pipe SET rcoeff = rcoeff * 1.15; (b) In den Zeilen der Tabelle Schächte (msm_node), in denen der Durchmesser (diameter) 0,99 beträgt, wird der Durchmesser auf 1 gesetzt: UPDATE msm_node SET diameter = 1.0 WHERE diameter = 0.99; %%(c)%% Die Leitung "Schieber1" wird geschlossen und die Leitung "Schieber2" wird geöffnet: UPDATE mw_Pipe SET StatusNo = 1 WHERE MUID = 'Schieber1'; UPDATE mw_Pipe SET StatusNo = 0 WHERE MUID = 'Schieber2'; (d) In der Tabelle "msm_CatchCon" wird eine neue Zeile angelegt und mit Werten befüllt: die MUID muss dabei eine Ganzzahl (Typ "Long") sein, "TypeNo"=1 bedeutet Zuordnung zu 1 Knoten (Single Node). INSERT INTO msm_CatchCon (MUID,CatchID,TypeNo,NodeID) VALUES (12,'Ezfl_01',1,'Node_01') (e) Die einfache Tabellenverknüpfung bezieht eine zusätzliche Tabellen mit ein. Im folgenden Beispiel wird das Feld Beschreibung (Description) der Schacht-Tabelle (msm_Node) mit der ID (MUID) des jeweils verknüpften Einzugsgebiets (msm_CatchCon.CatchID) gefüllt. UPDATE msm_Node, msm_CatchCon SET msm_Node.Description = msm_CatchCon.CatchID WHERE msm_CatchCon.NodeID = msm_Node.MUID; /*** (f) "Unterabfragen" Updates table with use of a sub-selection: AssetName in msm_node table is updated with MUID in the cases where AssetName field is not filled (Null) UPDATE msm_node SET AssetName = MUID WHERE MUID in ( SELECT MUID FROM msm_node WHERE AssetName is null) ***/ ===== Technische Details ===== Allgemeine SQL-Befehle können auf alle Tabellen und Featureklassen in der MIKE URBAN-Datenbank zugreifen. Sie können den SQL-Befehl ''UPDATE'' zum Verändern der Feldinhalte verwenden. Eine reine Auswahl mit dem SQL-Befehl ''SELECT'' ist nicht möglich. Behelfslösung: Feld "Markierung" mit ''UPDATE'' bearbeiten. Zwar funktioniert auch der SQL-Befehl ''ALTER'' (zum Hinzufügen und Löschen von Spalten), DHI rät aber von der Verwendung ab und empfiehlt, Veränderungen an der Datenstruktur ausschließlich über ArcMap oder ArcCatalog durchzuführen. Leere Einträge, beispielsweise im Feld ms_Catchment.Area, werden mit ''WHERE ms_Catchment.Area IS NULL'' oder ''WHERE ms_Catchment.Area IS NOT NULL'' abgefragt. Das Wurzelziehen mit ''SQRT(x)'' funktioniert nicht, dafür funktioniert ''x^0.5''. Da es sich bei SQL um eine Art Programmiersprache handelt, müssen Sie bei Dezimalzahlen immer den DezimalPUNKT verwenden. Mehrere SQL-Befehle hintereinander müssen durch Strichpunkte '';'' getrennt sein. Die Ergebnisse eines Befehls werden sofort gespeichert, das heißt ein zweiter Befehl kann bereits auf die Ergebnisse des ersten Befehls zugreifen. Zeilenumbrüche, mehrere aufeinander folgende Leerzeichen oder die Unterscheidung zwischen Klein- und Großschreibung haben keine Auswirkung auf SQL-Befehle, sie dienen lediglich der besseren Lesbarkeit. /*** Beispiele für das nicht empfohlene ALTER CREATE TABLE Friends ([FriendID] integer, [LastName] text, [FirstName] text, [Birthdate] date, [Phone] text, [Notes] memo, CONSTRAINT [Index1] PRIMARY KEY ([FriendID])); ALTER TABLE mw_Pipe ADD COLUMN tet1 text; ALTER TABLE mw_Pipe ADD COLUMN tet2 text(10); ALTER TABLE mw_Pipe ADD COLUMN StatusNo_Sc1 integer; ALTER TABLE mw_Pipe ADD COLUMN StatusNo_Sc2 int; hängt LongInteger an ***/ ===== Weiterführende Links ===== [[http://de.wikibooks.org/wiki/Einführung_in_SQL|Wikibooks: Einführung in SQL]] Die offizielle Dokumentation der "Allgemeinen SQL-Befehle" finden Sie im Handbuch "MIKE URBAN Model Manager" im Kapitel 2.11.3 "General SQL Command". ===== Weitere Beispiele ===== Folgender Ausdruck überträgt den undurchlässigen Anteil aus MOUSE Modell A auf den undurchlässigen Anteil in SWMM.((Nützlich, wenn man ein MOUSE-Modell mit "Senden" auf ein SWMM-Modell überträgt; dabei werden die hydrologischen Eigenschaften nämlich nicht übertragen.)) UPDATE mss_CatchModel, msm_HModA SET mss_CatchModel.Impervious = msm_HModA.ImpArea WHERE mss_CatchModel.CatchID = msm_HModA.CatchID; Folgender Ausdruck berechnet die Fließlänge [m] im Modell B als Wurzel der Fläche des Einzugsgebiets [ha], inklusive Umrechnung der Einheiten. UPDATE msm_HModB, ms_Catchment SET msm_HModB.Length = (ms_Catchment.Area_C * 10000) ^ 0.5 WHERE msm_HModB.CatchID = ms_Catchment.MUID; ===== Offene Punkte ===== * Berücksichtigt der SQL eine eventuelle Auswahl? Vermutlich nicht. Entsprechend dokumentieren! * ein Beispiel für Unterabfragen * SQL-Abfragen aus der MOUSE-Zeit ausgraben * Was ist, wenn die Datenbank nicht als Personal Geodatabase vorliegt? * Operatoren und Funktionen dokumentieren!