Beide Antworten, die ich sehe, funktionieren speziell in Informix gut und sind im Grunde genommen Standard-SQL. Das heißt, die Notation:
INSERT INTO target_table[(<column-list>)] SELECT ... FROM ...;
funktioniert problemlos mit Informix und, wie ich annehme, mit allen DBMS. (Früher, vor 5 oder mehr Jahren, hat MySQL diese Art von Dingen nicht immer unterstützt; jetzt hat es eine anständige Unterstützung für diese Art von Standard-SQL-Syntax und, AFAIK, würde es mit dieser Notation gut funktionieren). Die Spaltenliste ist optional, gibt aber die Zielspalten in der Reihenfolge an, so dass die erste Spalte des Ergebnisses des SELECT in die erste aufgelistete Spalte geht, usw. Fehlt die Spaltenliste, geht die erste Spalte des Ergebnisses des SELECT in die erste Spalte der Zieltabelle.
Was sich von System zu System unterscheiden kann, ist die Notation, die zur Identifizierung von Tabellen in verschiedenen Datenbanken verwendet wird - der Standard sagt nichts über datenbankübergreifende (geschweige denn DBMS-übergreifende) Operationen aus. Bei Informix können Sie die folgende Notation verwenden, um eine Tabelle zu identifizieren:
[dbase[@server]:][owner.]table
Das heißt, Sie können eine Datenbank angeben, optional den Server, der diese Datenbank beherbergt, wenn sie sich nicht auf dem aktuellen Server befindet, gefolgt von einem optionalen Eigentümer, einem Punkt und schließlich dem eigentlichen Tabellennamen. Der SQL-Standard verwendet den Begriff Schema für das, was Informix als Eigentümer bezeichnet. In Informix kann also jede der folgenden Schreibweisen eine Tabelle bezeichnen:
table
"owner".table
dbase:table
dbase:owner.table
dbase@server:table
dbase@server:owner.table
Der Eigentümer muss im Allgemeinen nicht in Anführungszeichen gesetzt werden; wenn Sie jedoch Anführungszeichen verwenden, müssen Sie den Namen des Eigentümers richtig schreiben - es wird zwischen Groß- und Kleinschreibung unterschieden. Das heißt:
someone.table
"someone".table
SOMEONE.table
identifizieren alle dieselbe Tabelle. Bei Informix gibt es eine kleine Komplikation mit MODE-ANSI-Datenbanken, bei denen Besitzernamen im Allgemeinen in Großbuchstaben umgewandelt werden (informix ist die Ausnahme). Das heißt, in einer MODE ANSI-Datenbank (die nicht häufig verwendet wird) könnten Sie schreiben:
CREATE TABLE someone.table ( ... )
und der Name des Eigentümers im Systemkatalog würde "SOMEONE" lauten und nicht "someone". Wenn Sie den Namen des Eigentümers in doppelte Anführungszeichen setzen, wirkt er wie ein Bezeichner mit Trennzeichen. Bei Standard-SQL können begrenzte Bezeichner an vielen Stellen verwendet werden. In Informix können Sie sie nur im Zusammenhang mit Besitzernamen verwenden. In anderen Kontexten behandelt Informix sowohl Strings in einfachen als auch in doppelten Anführungszeichen als Strings, anstatt Strings in einfachen Anführungszeichen als Strings und Strings in doppelten Anführungszeichen als abgegrenzte Bezeichner zu trennen. (Der Vollständigkeit halber sei erwähnt, dass es eine Umgebungsvariable DELIMIDENT gibt, die auf einen beliebigen Wert gesetzt werden kann, wobei Y am sichersten ist, um anzugeben, dass doppelte Anführungszeichen immer begrenzte Bezeichner und einfache Anführungszeichen immer Zeichenketten umgeben).
Beachten Sie, dass MS SQL Server in eckigen Klammern eingeschlossene [begrenzte Bezeichner] verwenden kann. Das sieht für mich seltsam aus und ist sicherlich nicht Teil des SQL-Standards.
2 Stimmen
Dieses Beispiel funktioniert: insert into tag_zone select @tag,zoneid,GETDATE(),@positiong.STIntersects(polygon) from zone