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 'Language Polygons' 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.