Ich habe eine CSV-Datendatei von einem Drittanbieter, bei der es sich um eine exportierte SQL Server-Tabelle handelt. Sie haben einfach a gemacht select * from foo
und das Ergebnis in eine Textdatei ausgegeben und gesendet.
In ihrer Tabelle befindet sich eine Spalte vom Typ Geometrie, daher habe ich in meinem Rohtext so etwas wie "0xE610000010C47 ..." usw. Im Moment habe ich sie als nvarchar in eine Tabelle in SQL Server geladen.
Ich hatte erwartet, dass ich an meinem Ende wieder in ein Geometriefeld zurückkehren könnte, aber das scheint nicht so einfach zu sein. STGeomFromWKB
funktioniert nicht, weil es eigentlich kein WKB ist. Ich kann die Zeichenfolge nicht als Geometrie umwandeln, da sie sich darüber beschwert, dass es sich nicht um eine WKT handelt.
Gibt es eine Möglichkeit, diesen Wert in SQL Server zu übernehmen, als wäre es ein normales Geometrie-BLOB? Kann ich SQL Server anweisen, es als solches zu behandeln?
Ich habe diesen Link gefunden, der zumindest dazu beigetragen hat, meine Frage zu SQL Server zu beantworten, mich aber nicht ganz dorthin gebracht hat: Was ist das Format des Geometriedatentyps von SQLServer 2008?
Antworten:
Wenn Sie die Daten in SQL Server importieren, fügen Sie sie in eine VARBINARY (MAX) -Spalte ein. Sie sollten dies dann nach Bedarf als Geometrie oder Geografie CASTEN können. Sie müssen darauf achten, dass die Zeichenfolge 0xE6 ... während des Imports nicht geändert wird.
Eine andere Möglichkeit besteht darin, eine dynamische Abfrage durchzuführen, um die Auswahl zu erhalten. Im Folgenden sind einige Konvertierungsbeispiele aufgeführt.
quelle
Aufbauend auf der Antwort von @ MickyT möchten Sie SQL schreiben, das alle Datensätze in Geometrie konvertiert, anstatt dies zu tun, da Sie eine Tabelle mit Ihren Werten bereits in WKB haben (oder wie auch immer wir es nennen) Deklarieren Sie eine Variable usw. usw.
Wenn Sie also mit einer einfachen temporären Tabelle beginnen, die die WKB in einem Datensatz repliziert, sieht sie folgendermaßen aus:
Wenn Sie dies nun als temporäre Tabelle behandeln und etwas SQL darum wickeln, haben Sie eine Spalte mit dem WKB darin und können diese wie oben vorgeschlagen in varbinary konvertieren:
wo temp.wkb kann die Spalte in der Tabelle größer sein , um die WKB - Werte aus der CSV - enthaltenden
Verwenden Sie abschließend die von MickyT beschriebene Methode und konvertieren Sie die Varbinary in Geometrie:
Was Geometrie und ein räumliches Ergebnis zurückgibt:
BEARBEITEN Wo wird die SRID deklariert? Wie MickyT antwortete, ist es in der Binärdatei, und Sie können dort eine weitere SQL-Abfrage umschließen, um zu testen:
was ergibt und in meinem Beispiel 2877 (Colorado State Plane) richtig ist:
quelle
Original-Poster hier, als ich versuchte, die Anmeldung abzuschließen, wurde die Anmeldung für den Original-Beitrag nicht verknüpft. Wie auch immer....
Danke für all die Hilfe! Ich werde jede Antwort positiv bewerten, sobald ich dazu in der Lage bin. Wenn ich herausfinden kann, wie dieses Konto und das ursprüngliche Konto verknüpft werden können, kann ich eine Antwort markieren. Auch nach Ihren Hinweisen kann ich nicht glauben, dass ich es verpasst habe,
CONVERT
stattdessen zu verwendenCAST
. Es macht es viel einfacher.Ich denke, mein Hauptproblem war es, den rohen binären "String" auf etwas zu bringen, das ich verwenden konnte. Hier ist ein Beispiel, wie ich es gelöst habe:
quelle