Mensaje de error cuando intenta insertar datos en una tabla personalizada en Microsoft Dynamics NAV: "No se puede encontrar el objeto"NAVDBName.dbo.CompanyName$ TableName"porque no existe o no tiene permisos"


Síntomas


Cuando intenta insertar datos en una tabla personalizada, o cuando se ejecuta un proceso que inserta datos en una tabla personalizada, recibirá un mensaje de error similar al siguiente:

Se ha producido el siguiente error de SQL Server al tener acceso a la tabla nombreTabla :



1088, "42000", [Microsoft] [controlador ODBC para SQL Server] [SQL Server] no puede encontrar el objeto"NAVDBName.dbo. CompanyName$ TableName"porque no existe o no tiene permisos.



SQL:

SET IDENTITY_INSERT "NAVDBName"". "dbo"." CompanyName$ TableName"en
Nota: En este ejemplo, TableName representa la tabla de Microsoft Dynamics NAV del cliente. NAVDBName representa el nombre de base de datos del cliente Microsoft Dynamics NAV. CompanyName representa el nombre de la compañía del cliente de Microsoft Dynamics NAV.



Este problema puede producirse en versiones de Microsoft Dynamics NAV que utilizan la opción de base de datos de Microsoft SQL Server.

Causa


Este problema se produce si se cumplen las condiciones siguientes:
  • En uno de los campos de la tabla que se indica en el mensaje de error, se establece la propiedad AutoIncrement a sí.

  • La operación de INSERCIÓN que utilice explícitamente, rellena el campo que tiene la propiedad AutoIncrement establecida en Sí.

  • No tiene uno de los siguientes permisos:
    • La pertenencia a funciones de servidor SYSADMIN en SQL Server
    • La pertenencia a funciones de base de datos db_owner para la base de datos de Microsoft Dynamics NAV
    • La pertenencia a funciones de base de datos db_ddladmin de la base de datos de Microsoft Dynamics NAV

Solución


Para resolver este problema, utilice uno de los métodos siguientes.

Método 1

Modificar la operación de INSERCIÓN de manera que no rellena el campo que tiene la propiedad AutoIncrement establecida en Sí.

Método 2

Establezca la propiedad AutoIncrement no para el campo correspondiente.

Nota: Los métodos 1 y 2 del método pueden requerir la asistencia de un desarrollador de Microsoft Dynamics NAV, especialmente si la modificación requiere un cambio de código. Estos cambios se deben probar minuciosamente antes de aplicar los cambios a una base de datos activa de Microsoft Dynamics NAV.

Método 3

Conceder los permisos de Alter para la tabla personalizada a la función de la aplicación en cuestión (por ejemplo & sombra de $ndo, si ha seleccionado el modelo de seguridad estándar) en SQL Server Management Studio.


Nota: Permisos que se conceden manualmente a las tablas de SQL Server Management Studio se sobrescriben cuando se ejecuta una sincronización de seguridad en Microsoft Dynamics NAV. Por lo tanto, debe conceder los permisos de Alter a la tabla personalizada otra vez después de ejecutar la sincronización de seguridad.

Más información


En Microsoft Dynamics NAV, si se establece la propiedad AutoIncrement a Sí para un campo de tipo de datos Integer o de un campo de tipo de datos BigInteger, el campo correspondiente debería rellenará automáticamente por un valor entero único generado por el sistema. El valor que se utiliza para rellenar los incrementos de campo consecutivamente para cada nuevo registro que se inserta.

Para implementar la propiedad AutoIncrement , Microsoft Dynamics NAV define una columna de SQL Server que tiene la propiedad de identidad asociada con ella. Hace que la propiedad IDENTITY de SQL Server rellenar la columna, como se describió anteriormente. Si se activa la propiedad IDENTITY de una columna de SQL Server, los usuarios explícitamente no pueden rellenar la columna correspondiente en una instrucción INSERT , a menos que los usuarios tienen uno de los siguientes permisos:
  • La pertenencia a funciones de servidor SYSADMIN en SQL Server
  • La pertenencia a funciones de base de datos db_owner para la base de datos de Microsoft Dynamics NAV
  • La pertenencia a funciones de base de datos db_ddladmin de la base de datos de Microsoft Dynamics NAV
Además de contar con estos permisos, los usuarios también deben ejecutar el siguiente comando para completar la operación de INSERCIÓN.
SET IDENTITY_INSERT <table_name> ON
Cuando se produce el mensaje de error que se menciona en la sección "Síntomas", Microsoft Dynamics NAV intenta ejecutar esta instrucción SET en SQL Server.

El método de llenado de forma explícita una columna que tiene la propiedad IDENTITY es un método que no se requiere normalmente. Generalmente, las columnas que tienen la propiedad de identidad se rellenan automáticamente por SQL Server.