6 votos

¿Por qué es una cláusula WHERE de consulta de gdb no válida de acuerdo con la API RESG de ArcGIS?

Actualización: Esto sólo ocurre cuando la capa que se consulta tiene un join. No importa si tiene una combinación de una base de datos diferente o no. Y la consulta que falla no está tratando de obtener acceso a las columnas en la tabla combinada.

En fin a más de expresar con precisión el problema, he usado completo (4 piezas) los nombres de columna de abajo donde se requiera. Ver la versión actualizada de la cláusula where a continuación.

Pregunta Original:

Estamos utilizando el Servidor de ArcGIS 9.3.1, Java, y de ArcSDE en SQL Server 2005 sp2.

Sería muy útil para nosotros ser capaces de controlar nuestros datos periódicamente para detectar defectos, con una consulta, tales como

select * from sdeDLM.SDE.Lang_Polygons
where ISO_LANGUAGE_CODE_ID <> LEFT(ID , 3)

En ArcMap, que puedo hacer esa consulta utilizando Seleccionar por Atributos. Entro en la anterior cláusula where y haga clic en "Verificar", y la expresión es verificado con éxito.

Pero a fin de supervisar los datos que necesitamos para el uso de la API REST. Podemos hacerlo con éxito RESTO de consultas con una cláusula where, tales como

WHERE sdeDLM.SDE.Lang_Polygons.ISO_LANGUAGE_CODE_ID IS NULL

o simplemente

WHERE ISO_LANGUAGE_CODE_ID IS NULL

Aquellos que funcionan bien. FWIW, la dirección URL para que el RESTO de la consulta es:

http://ourServer:8399/arcgis/rest/services/DLM21_query/MapServer/2/query?text=&geometry=&geometryType=esriGeometryEnvelope&inSR=&spatialRel=esriSpatialRelIntersects&where=ISO_LANGUAGE_CODE_ID+is+NULL&returnGeometry=false&outSR=&outFields=&f=html

Pero cuando intento DESCANSAR consulta con una cláusula where, como

    WHERE sdeDLM.SDE.Lang_Polygons.ISO_LANGUAGE_CODE_ID <> LEFT(sdeDLM.SDE.Lang_Polygons.ID , 3)

el RESTO de la API devuelve el mensaje:

Unable to perform query. Please check your parameters

Lo mejor que me puede decir, es la IZQUIERDA() función que hace la diferencia. He sido capaz de utilizar correctamente las cláusulas where con todo lo demás en ellos, incluyendo '<>'.

El RESTO de la API de google docs para realizar consultas de una capa de decir que "Cualquier legales cláusula where de SQL operativo en los campos en los que la capa está permitido".

La dirección URL de la consulta que le da un error:

http://ourServer:8399/arcgis/rest/services/DLM21_query/MapServer/2/query?text=&geometry=&geometryType=esriGeometryEnvelope&inSR=&spatialRel=esriSpatialRelIntersects&where=sdeDLM.sde.Lang_Polygons.ISO_Language_Code_ID+%3C%3E+Left%28sdeDLM.sde.Lang_Polygons.ID%2C+3%29&returnGeometry=true&outSR=&outFields=&f=html

Es allí una manera de conseguir la API de REST para aceptar una cláusula where con Izquierda()? O una manera de averiguar por qué no funciona?

Traté de navegación de los últimos registros en C:\Program Files\ArcGIS\servidor\usuario\log. El Servidor de archivos-20100929-143218.dat muestra la siguiente salida desde el momento en que la consulta no se pudo:

String request received. Request size is 2629 characters.
QueryFeatureData2 has started.
Preparation for method: QueryFeatureData2 has started.
Preparation for method: QueryFeatureData2 has completed.
Query Operation for method: QueryFeatureData2 on layer &apos;Language Polygons&apos; has started.
**GeoDatabase Error :An invalid SQL statement was used.**
QueryFeatureData2 has completed.
Method failed.HRESULT = 0x80040207 : This is a FACILITY_ITF error that is specific to the interface that returned this error. See the documentation of the interface that returned this error for information about this HRESULT.
ERROR INFO = An invalid SQL statement was used.

Pero, ¿por qué es la instrucción SQL válida? Claramente la cláusula where se ha probado como válidos en otros lugares. Y ¿por qué algunos de mis cláusulas where de ser aceptada como válida, pero no uno con la IZQUIERDA() en ella?

Gracias por la ayuda.

1voto

Liedman Puntos 3144

Sé que en ArcGIS Desktop, los nombres de campo ArcSDE deben estar entre comillas dobles. Tal vez esta referencia de SQL ayudará.

1voto

Jonathan Puntos 197

Como una solución provisional (ya que está accediendo a los datos a través de productos que no son de ESRI), puede utilizar una vista con varias versiones para acceder a los datos.

Una vista multi-versionada ayudará porque toma en cuenta las supresiones y agrega que representan cada versión; De esa manera usted no tiene que preocuparse de datos faltantes al leer directamente de la tabla de capas a través de SQL.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X