【发布时间】:2012-12-26 13:25:02
【问题描述】:
我创建了一个 SSIS 包,它从 SQL Server 数据库中取出地理数据并将其复制到 Greenplum Postgres 数据库中的几何列。
由于 PGNP 驱动程序在以正常方式尝试时出现奇怪的错误,我正在以迂回的方式进行操作。所以我正在做的是在 SQL Server 源上使用 GeogColumn.STAsText() 并将其插入到 Greenplum 数据库中的文本列中,然后运行一个任务,使用新插入的文本更新 Greenplum 表中的几何列,这应该例如看起来像POLYGON(-85 42, -86 43)。
问题是 \\000 在每个字符之后添加,然后更新将不起作用。这是它的样子:
来源
目的地
如何阻止这种情况发生?
【问题讨论】:
-
\000似乎是 NULL 字符,它将终止我记忆中的 C 天中的字符串。该数据可能在 SSIS 元数据中标记为 DT_IMAGE,是吗?在这种情况下,将不会使用数据查看器。我联系了一位使用 GIS 数据并在 SSIS 中这样做过的朋友,希望他能提供帮助。 -
源和目的都是SSIS中的DT_NTEXT,我查了很多次。感谢您的帮助。
-
我想知道这是否是问题所在。我想知道来自STAsText 的 nvarchar(max) 数据是否出于某种原因在其中获得了行终止符。或者它在转移中得到了加强。如果您尝试对图像类型进行显式转换,那会起作用还是会有所作为。因此
CAST(GeogColumn.STAsText() AS image) AS imgColumn我想知道这是否会更好地处理 NUL。 -
当我尝试 SSIS 说“不允许从数据类型 nvarchar(max) 到图像的显式转换。”
-
试图获得最少的复制,至少从 SQL Server 复制到 SSIS。在这里或任何地方都没有可与之交谈的 Postgres。这似乎可以使它成为二进制文件。我的大脑意味着 varbinary(max) 但我的手指不遵守。
SELECT CAST(CAST(geometry::STGeomFromText('POLYGON((0 0, 3 0, 3 3, 0 3, 0 0),(2 2, 2 1, 1 1, 1 2, 2 2))', 0) AS geometry).STAsText() AS varbinary(max)) AS geo_bin
标签: sql-server postgresql ssis greenplum