2016-10-20 3 views
0

Ich habe eine Tabelle von Benutzern, die ihre ID und Adresse haben. Ich muss eine 2. Tabelle mit ihrer ID und den von ihrer Adresse erzeugten Koordinaten bevölkern.Ist es möglich, ein Skript mit angeschlossenem API auf einem SQL-Trigger auszuführen?

Was ich möchte, ist ihre Koordinaten zu generieren und füllen die zweite Tabelle, wenn ein neuer Benutzer hinzugefügt oder ihre Adresse geändert wird.

Derzeit besteht meine Lösung darin, die Benutzerliste mit Adressen zu exportieren, die Geoservices-Anwendung von Texas A & M zu verwenden, ihre Koordinaten abzurufen und die Spalten der neuen Excel-Datei an die entsprechenden Stellen innerhalb der neuen Tabelle zu importieren.

Ich bin mir bewusst, dass ich eine Anwendung außerhalb von SQL erstellen konnte, die diese Tabellen im täglichen Zeitplan für Unterschiede überprüft und entsprechend aktualisiert, aber ich möchte dies in SQL automatisieren, so dass die Tabellen in Echtzeit aktualisiert werden.

+0

Sie können die Koordinaten nachsehen, bevor Sie Ihre INSERT-Anweisung starten. Die Datenbankschicht (dh SQL Server) ist nicht der ideale Ort, um diese Nachschlagevorgänge durchzuführen. Das ist nicht das Sagen, es ist unmöglich, aber ich würde es vorziehen, die Koordinatensuche in einer anderen Ebene zu machen. –

+1

Möchten Sie wirklich, dass die ursprüngliche Einfüge-/Aktualisierungstransaktion zu a) aufgehalten wird, bis ein API-Aufruf abgeschlossen ist, und b) abgebrochen wird, wenn der API-Aufruf einen Fehler generiert? Für die überwiegende Mehrheit der Leute wäre die Antwort auf beide Fragen nein, in diesem Fall ist es besser, wenn Sie eine Art von * queued * -Update betrachten und einfach die Anfrage nach einem Update vom Trigger einholen (z. B. mit einem Service-Broker) oder nur eine einfache Tabelle, um die Warteschlange ausstehender Aktualisierungen darzustellen). Die Auslagerungsseite kann dann mit Netzwerkverzögerungen, Wiederholungen usw. umgehen, ohne die ursprüngliche Transaktion zu gefährden. –

Antwort

1

Sie können Code schreiben (z. B. in .NET) und ihn als Assembly in Ihrer SQL-Server-Datenbank speichern. Dies wird CLR genannt. Sie können diesen Code dann direkt in Form von gespeicherten Prozeduren und Funktionen aus der Datenbank ausführen.

Sie könnten eine gespeicherte Prozedur in Code schreiben, um die Daten aus Ihrer ersten Tabelle zu übernehmen, nachzuschlagen und nach Bedarf in Ihrer zweiten Tabelle zu aktualisieren/einzufügen. Sie könnten diese gespeicherte Prozedur aufrufen, wenn und wie Sie, wie jede andere Prozedur auch.

MSDN hat eine Einführung, wie dies zu tun ist.

Filesystemhelper ist ein Beispiel für eine Clr, die Dateimanipulation durchführt - nicht den Code, den Sie suchen, aber eine gute Illustration von dem, worüber ich spreche.

Verwandte Themen