En primer lugar, aclaremos un par de cosas. Cuando dices que quieres añadir una tabla de MS SQL Server Management Studio 2012
lo que realmente quieres hacer es añadir una tabla de MS SQL Server
. El estudio de gestión es simplemente la interfaz de usuario para interactuar con la propia base de datos.
En segundo lugar, voy en el supuesto de que esta base de datos SQL Server no tiene ArcSDE cargado en él. Si es así, la carga de una tabla debe ser tan simple como añadir una tabla estándar, y no sería una capa de consulta.
ArcGIS es bastante quisquilloso cuando se trata de tratar con bases de datos fuera del entorno SDE. Usted tiene que asegurarse de que ha ido los controladores actualizados para el MS SQL Server. Usted probablemente como usted es capaz de añadir la tabla. Si usted es capaz de obtener los datos como una tabla dentro de ArcGIS, entonces usted debería ser capaz de utilizarlo como parte de una unión o relacionar, independientemente de lo que la base de datos se almacena en.
Como ha supuesto, el problema es la identificación única o la falta de ella. Como usted sabe, con cualquier tabla independiente que se crea a través del entorno de ArcGIS, un Object ID
se crea. Se trata de un identificador único que permite a ArcGIS identificar cualquier fila individual. Cuando introduzca una capa desde una base de datos externa al entorno de ArcGIS, deberá especificar el campo que se utilizará en lugar del campo Object ID
. Si no especifica un campo de este tipo, podrá añadir una tabla, pero no podrá realizar ninguna opción que requiera la indexación de las filas. Esto incluye cualquier tipo de Joins o Relates y otras operaciones espaciales.
En la imagen de abajo, estoy cargando una tabla. El primer atributo que aparece es gid
. Como puede ver, muestra que es Not Nullable
. Se trata de un segundo criterio importante, pero no obligatorio de entrada. Se producirá un error si se encuentran valores NULL, pero no si el campo permite valores NULL. Este es el campo que elegiré como Unique Identifier
atributo.
Aunque esta capa es una capa espacial, los pasos son los mismos para una tabla no espacial también.
Ahora, volviendo a tu problema, y un par de opciones para solucionarlo. Su tabla no tiene un campo ID único. Necesitas uno. Tienes un par de opciones.
-
Añada el equivalente de SQL Server de un campo Autonumber a su tabla. Este método creará un ID Único que no cambiará con respecto a una fila en particular. Una vez asignado un ID, persistirá y nunca se repetirá o duplicará.
-
Cree una Vista en SQL Server, basada en su tabla existente, y añada un campo Autonumber allí. Este método creará un Identificación única similar a un ArcGIS ID del objeto . Debería NO utilizarse como base para un join o un relate, ya que la asignación de ID a las filas se basa únicamente en los cambios de orden de clasificación. Sin embargo, es suficiente para cumplir el requisito de ID de tabla único para una capa de consulta. A continuación se muestra un código de ejemplo para ese caso:
CREATE VIEW VIEW_NM AS SELECT Row_number() OVER(ORDER BY "EventName" DESC, "BoreholeID") AS tbl_id, "EventName", "Method", "BoreholeID" FROM yourtable
------ Editar ----- Se planteó la preocupación de que el uso de una función Row_number() no produciría un ID único adecuado, porque podría devolver características diferentes. En el caso que proporcioné, esto es cierto, en el sentido de que la función Order By
no es único. Por lo tanto, debe asegurarse de incluir una combinación de campos en esa función que devuelva un orden de clasificación único, o valores cuando se conviertan en un número. Esto garantizará que una característica determinada devuelva el mismo ID de objeto, independientemente de la consulta que se realice en ArcGIS. Estoy añadiendo "BoreholdID" a la función Order By
sección.
Un problema que puede surgir al trabajar con una vista es el tipo de campo que ArcGIS aplicará a este campo "tbl_id". Es posible que lo vea como un tipo de campo que no es capaz de manejar, por lo que puede que tenga que convertirlo en un tipo de campo Integer
tipo de campo. Así es como hice algo similar con una vista en PostgreSQL:
SELECT (int4(Row_number() OVER(ORDER BY "EventName" DESC)) AS tbl_id
La sintaxis para SQL Server puede ser ligeramente diferente. Puede ser int
en lugar de int4
.
-
Otra forma de crear este identificador único sería utilizar la función Crear tabla de consulta herramienta. Esta herramienta permite seleccionar una tabla, una vista o crear una consulta SQL personalizada utilizando tablas de bases de datos y mostrarlas en ArcGIS como una capa o una tabla independiente. Uno de los parámetros de la herramienta es cómo crear la Key
campo. De nuevo se hace seleccionando uno o más campos encontrados en la capa de consulta, que se utilizarán para crear dinámicamente el ObjectID. Esto es muy parecido a la función Row_number(), ya que ambas crean un identificador único basado en los datos del resultado de la consulta. Una lo hace simplemente en la base de datos, la otra lo hace dentro de ArcGIS. Una ventaja potencial de este método es la posibilidad de incorporarlo fácilmente como parte de un script de Python. Un ejemplo se muestra en la parte inferior del documento de ayuda.
Como regla general, conviene tener un atributo identificador único para cada tabla, ya sea espacial o de atributos, que se cree. La mayoría de las bases de datos funcionan de forma más eficiente en tablas en las que existe este atributo, y se designa como clave primaria, o similar. Permite crear índices y, en muchos casos, la funcionalidad de edición y selección se ve restringida cuando no existe un identificador único.
De todas formas, inténtalo a ver si funciona. Como ya he mencionado, ArcGIS puede ser muy particular al añadir capas de consulta. Algunos otros problemas que puede en son con tipos de campo que se traducen de manera diferente de la forma en que se definen en la base de datos, a la forma en ArcGIS los interpreta.
Este documento de ayuda puede ayudarle a asegurarse de que convierte los tipos de datos de su tabla en tipos que serán reconocidos por ArcGIS. Tipos de datos de SQL Server compatibles con ArcGIS