我尝试使用bcp(批量复制工具)将CSV文件中的地理数据导入SQL服务器,但我无法弄清楚格式。我想在CSV文件中使用类似的东西,但我在POINT列上出现错误:
101932694,POINT(44.0586891174316 -69.2067337036133 4326),2014-07-30,24452353
如何在CSV文件中格式化地理数据,以便bcp接受它?
答案 0 :(得分:1)
好的,它无法找到有关使用bcp导入人类可读地理数据的任何信息,因此我转换了点数据:
POINT(44.058689117431641 -69.206733703613281 4326),...
以二进制形式:
E6100000010D000000203B4D51C000000020830746400000000000E6B040,...
并将二进制表格放入我的CSV文件中。 bcp似乎可以正常工作。
答案 1 :(得分:0)
我对BCP一无所知,但希望这能满足您的需求。
尝试将数据作为字符串导入临时表,然后通过更新将其导入真实表。
SQL Server内部空间数据的存储方式类似于varbinary,即您的点将存储为
0xE6100000010C010000203B4D51C0FAFFFF1F83074640
如果您尝试使用SSIS移动数据,它实际上将其视为varbinary,而不是空间。因此,需要进行转换才能使字符串格式正确。
SELECT GEOGRAPHY::STGeomFromText('POINT(44.0586891174316 -69.2067337036133)', 4326)
or
SELECT GEOGRAPHY::Point(-69.2067337036133,44.0586891174316,4326)
由于这些原因,我猜测BCP没有隐含地识别转换,你可能需要手动完成。
CSV =>临时表=>
INSERT INTO RealTable (GeogColumn) SELECT GEOGRAPHY::STGeomFromText(GeogString,4326) FROM TempTable