J'ai un fichier de données CSV d'un tiers qui est une table SQL Server exportée. Ils ont simplement fait un select * from foo
et sorti le résultat dans un fichier texte et l'ont envoyé.
Dans leur table se trouve une colonne de type Geometry, donc dans mon texte brut j'ai quelque chose comme "0xE610000010C47 ...", etc. Pour le moment je l'ai chargé dans une table dans SQL Server en tant que nvarchar.
Je m'attendais à pouvoir revenir en arrière dans un champ de géométrie de mon côté, mais cela ne semble pas être si facile. STGeomFromWKB
ne fonctionne pas car ce n'est pas un WKB. Je ne peux pas convertir la chaîne en géométrie car elle se plaint que ce n'est pas un WKT.
Alors, est-il possible d'obtenir cette valeur dans SQL Server comme s'il s'agissait d'un BLOB de géométrie normal? Puis-je dire à SQL Server de le traiter comme tel?
J'ai trouvé ce lien qui a au moins aidé à répondre à ma question sur ce qui se trouve dans SQL Server, mais ne m'a pas permis de tout faire: quel est le format du type de données Geometry de SQLServer 2008
Réponses:
Lorsque vous importez les données dans SQL Server, placez-les dans une colonne VARBINARY (MAX). Vous devriez ensuite être en mesure de CAST cela en tant que géométrie ou géographie selon les besoins. Vous devrez faire attention à ce que la chaîne 0xE6 ... ne soit pas modifiée lors de l'importation.
Une autre option consiste à effectuer une requête dynamique pour obtenir la sélection. J'ai mis quelques exemples de conversion ci-dessous.
la source
En s'appuyant sur la réponse de @ MickyT, puisque vous allez avoir une table avec vos valeurs déjà dans WKB (ou comme nous l'appelons), vous voudriez écrire sql qui convertira tous les enregistrements en géométrie, plutôt que d'avoir à déclarer une variable, etc. etc.
Donc, si vous commencez avec une simple table temporaire qui répliquerait le WKB dans un enregistrement, cela ressemblerait à ceci:
Maintenant, si vous traitez cela comme une table temporaire et enveloppez du SQL autour de lui, vous avez une colonne avec le WKB là-dedans et vous pouvez le convertir en varbinary comme suggéré ci-dessus:
où temp.wkb peut être la colonne de votre plus grande table contenant les valeurs WKB du CSV
Enfin, utilisez la méthode décrite par MickyT et convertissez le varbinary en géométrie:
Ce qui renvoie une géométrie et un résultat spatial:
EDIT où le SRID est-il déclaré? Comme MickyT a répondu, c'est dans le binaire, et vous pouvez envelopper 1 requête SQL supplémentaire autour de là pour tester:
qui donne, et est correct dans mon exemple, 2877 (plan d'état colorado):
la source
Affiche originale ici, lorsque j'ai essayé de terminer l'inscription, elle n'a pas lié la connexion à la publication d'origine. En tous cas....
Merci pour votre aide! Je voterai pour chaque réponse une fois que je pourrai et peut-être que si je peux comprendre comment lier ce compte et celui d'origine, je peux marquer une réponse. De plus, après vos pointeurs, je ne peux pas croire que j'ai manqué d'utiliser
CONVERT
au lieu deCAST
. Cela rend beaucoup plus facile.Je pense que mon problème principal était d'obtenir la "chaîne" binaire brute à quelque chose que je pourrais utiliser. Voici un exemple de la façon dont je l'ai résolu:
la source