У меня есть файл данных CSV от стороннего производителя, который является экспортированной таблицей SQL Server. Они просто сделали select * from foo
и вывели результат в текстовый файл и отправили его.
В их таблице есть столбец типа Geometry, поэтому в моем исходном тексте у меня есть что-то вроде «0xE610000010C47 ...» и т. Д. На данный момент я загрузил его в таблицу в SQL Server как nvarchar.
Я ожидал, что смогу вернуться обратно в поле Geometry с моей стороны, но это не так просто. STGeomFromWKB
не работает, потому что это на самом деле не WKB. Я не могу привести строку как Geometry, потому что она жалуется, что это не WKT.
Итак, есть ли способ получить это значение в SQL Server, как если бы это был обычный BLOB-объект Geometry? Могу ли я сказать, чтобы SQL Server рассматривал его как таковой?
Я нашел эту ссылку, которая, по крайней мере, помогла мне ответить на мой вопрос о том, что находится в SQL Server, но не дошла до конца : каков формат данных Geometry в SQLServer 2008
Ответы:
Когда вы импортируете данные в SQL Server, поместите их в столбец VARBINARY (MAX). Затем вы должны быть в состоянии CAST это как геометрия или география, как требуется. Вам нужно быть осторожным, чтобы строка 0xE6 ... не изменялась во время импорта.
Другой вариант - выполнить динамический запрос, чтобы получить выбор. Я положил пару примеров преобразования ниже.
источник
Основываясь на ответе @ MickyT, так как у вас будет таблица со значениями, уже находящимися в WKB (или как мы ее называем), вы захотите написать sql, который преобразует все записи в геометрию, а не объявить переменную и т. д.
Поэтому, если вы начнете с простой временной таблицы, которая будет дублировать WKB в одной записи, это будет выглядеть так:
Теперь, если вы рассматриваете это как временную таблицу и оборачиваете вокруг нее некоторый SQL, у вас есть столбец с WKB, и вы можете преобразовать его в varbinary, как предложено выше:
где temp.wkb может быть столбцом в вашей большой таблице, содержащим значения WKB из CSV
Наконец, используйте метод, описанный MickyT, и конвертируйте varbinary в геометрию:
Который возвращает геометрию и пространственный результат:
РЕДАКТИРОВАТЬ, где SRID объявляется? Как ответил MickyT, он находится в двоичном файле, и вы можете проверить еще 1 sql-запрос, чтобы проверить:
который дает, и правильно в моем примере, 2877 (штат Колорадо):
источник
Оригинальный постер, когда я пытался завершить регистрацию, он не связывал подпись с оригинальным постом. Так или иначе....
Спасибо за помощь! Я буду одобрять каждый ответ, как только смогу, и, возможно, если я смогу выяснить, как связать этот аккаунт с оригиналом, я смогу пометить ответ. Кроме того, после ваших указателей я не могу поверить, что я пропустил использование
CONVERT
вместоCAST
. Это делает это намного проще.Я думаю, что моей главной проблемой было получение необработанной двоичной «строки», которую я мог бы использовать. Вот пример того, как я решил это:
источник