可通过ArcGIS工具访问SQL语言的程度如何?


10

这个问题听起来太多余了……
无论如何,我被要求探索SQL在ArcGIS中的用法。我们将SDE DB用于所有服务器端存储和数据库管理/大规模编辑。但是,我试图更深入地研究ArcGIS工具中集成SQL的程度。还有就是在一份报告中SQL查询参考指南中的ArcGIS 10的帮助,明确指出SQL语法也没有使用现场计算器工具时的工作。我发现这非常令人失望,因为在计算字段值时能够直接从数据库本身提取和处理信息似乎非常有用。

尝试在ArcGIS中使用SQL时可能遇到的最大限制和陷阱是什么?与SQL集成时,哪些工具具有最佳功能?

如果需要一个示例来使这个问题更清楚,我将尝试跟踪给定区域中特定类型的兴趣点的数量。每个点都有一个描述其类型和区域的属性。我当前的解决方案涉及大量使用游标进行计数和数据检索,但是一位上司指出,简单的SQL查询可以完成所有这些以及更多工作。不幸的是,似乎此功能不存在。

还是?


是否有任何查询表的版本?
Michael Todd

版本?我认为我不熟悉这个词。
纳撒努斯2011年

1
对图层进行版本控制可以在保留先前功能的同时对图层进行更改。因此,如果要素被删除,则该图层的当前版本将显示该要素不再存在;因此,请参见图9。但是,该功能实际上仍然存在于“基础”层中,并且GIS工具可用于查看显示该功能的层的不同版本。通过右键单击ArcCatalog中的图层并选择“属性”,可以确定图层是否为版本。“常规”选项卡的底部有一个称为“版本控制”的部分,此处的信息将告诉您图层是否已版本化。
Michael Todd

Answers:


9

如果要使用Python,请查看ArcSDESQLExecute命令。这将允许您执行任意SQL,但必须通过SDE进行连接。如果查询的结果是一组行,则属性将作为Python列表列表返回。否则,如果SQL成功执行,它将返回True;否则,将返回None。另请参阅:使用ArcSDE连接执行SQL


我一定会的!在这种情况下,这似乎正是我想要的。非常感谢。
纳撒努斯2011年

5

如果要编写自定义ArcObjects,则可以使用ExecuteSQL方法针对SDE Workspace执行任意SQL 。此方法仅限于不返回结果集的查询,例如INSERT,UPDATE或某些存储过程。

如果您通过ArcMap UI进行操作,那么您的选择将受到更多限制。之所以不能通过“计算字段”使用SQL,是因为该表达式实际上是VBScript和/或Python。您可以使用VBScript或Python执行任意SQL表达式并从结果游标中提取值,但我不建议这样做。

或者,您可以使用Regan的答案并创建查询层。对于只读数据,这是您的最佳方法。如果您需要更新数据,则稍微复杂一些。您需要使用“新”值创建查询层,对现有表执行联接,然后使用计算字段。可以将其与ExecuteSQL结合使用以执行复杂的更新,然后查看结果(有点笨拙)。

最后一种选择是直接对ArcSDE表执行SQL。


1
您的最后一点(直接对表执行SQL)是为什么我问我的版本控制问题。数据库级别的SQL查询仅从基础层提取(除非设置了多版本视图),因此如果对层进行了版本控制,则该查询将不起作用。
Michael Todd

我正在做的工作大部分是在Python中进行的,但似乎越来越多的UI真正功能依赖于ArcObjects。
纳撒努斯2011年

一切都在内部基于ArcObjects构建,包括python功能。
James Schek 2011年

如果Python中的ArcSDESQLExecute可以返回结果,那么如何通过IWorkspace.ExecuteSQL实现相同的结果?
Petr Krebs

@petr你不能直接...我已经更新了我的答案。
James Schek 2011年


1

根据您使用的RDBMS,您可以利用ArcObjects或arcpy之外的SQL库,只要您不依赖于返回要素数据即可。我每天使用的SQL Server数据库中的许多查询本质上都不是空间查询,因此我将使用.NET内的System.Data类或Python应用程序内的pymssql Python库。如果确实需要使用空间数据,那么“查询层”是最好的选择。关于查询层的唯一警告是它们仅适用于使用空间数据类型(不是标准SDEBINARY类型)存储的数据。


这开始变得越来越激烈。我想我需要更仔细地评估自己的需求。如果您的意思是诸如多边形和点/线本身之类的东西,而仅仅是文本/整数字段中的值,那么我将不需要“空间”数据。
纳撒努斯2011年

如果需要返回几何类型,则可以使用标准的ArcObjects / arcpy数据访问。如果您要做的只是访问“表格”数据(不涉及空间类型),则只需使用常规SqlConnections进行数据库调用(对于SQL Server-您的连接类型可能会有所不同)。结果比您从ICursor获得的结果更灵活。但是,如果我理解您的问题,并且您仅限使用字段计算器,那么您将无法使用原始SQL。
SagebrushGIS
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.