症状
尝试将数据插入自定义表时,或运行将数据插入自定义表中的进程时,将收到如下所示的错误消息:
访问TableName ( (时发生以下) 错误
:1088, "42000",[Microsoft][ODBC SQL Server Driver][SQL Server]找不到对象"NAVDBName.dbo"。 SQL ServerCompanyName$ TableName",因为它不存在或您没有权限。
SQL:SET IDENTITY_INSERT"NAVDBName"。"dbo"."CompanyName$ TableName" ON
注意 此示例中 ,TableName 表示客户的 Microsoft Dynamics NAV 表。 NAVDBName 表示客户的 Microsoft Dynamics NAV 数据库名称。 CompanyName 表示 Microsoft Dynamics NAV 中客户指定的公司名称。
使用数据库数据库选项的 Microsoft Dynamics NAV 版本Microsoft SQL Server此问题。
原因
如果满足以下条件,则会出现此问题:
-
在错误消息中指示的表中的一个字段中,AutoIncrement 属性设置为"是"。
-
使用的 INSERT 操作显式填充 AutoIncrement 属性设置为"是"的字段。
-
没有以下权限之一:
-
SQL Server 中的 SYSADMIN 服务器角色SQL Server
-
Microsoft db_owner NAV 数据库的数据库角色成员身份
-
Microsoft db_ddladmin NAV 数据库的数据库角色成员身份
-
解决方法
若要解决此问题,请使用以下方法之一。
方法 1
修改 INSERT 操作,以便它不会填充将 AutoIncrement 属性设置为"是"的字段。
方法 2
将相关字段的 AutoIncrement 属性设置为"否"。
注意 方法 1 和方法 2 可能需要 Microsoft Dynamics NAV 开发人员的帮助,尤其是当修订需要更改代码时。 在将更改应用到实时 Microsoft Dynamics NAV 数据库之前,应全面测试此类更改。
方法 3
向相关应用程序角色授予自定义表的 Alter 权限 (例如,&ndo$shadow(如果在 SQL Server Management Studio 中选择了"标准") 模型)。
注意 在 Microsoft Dynamics NAV 中运行安全同步时,会覆盖SQL Server Management Studio中手动授予表的权限。 因此,运行安全同步后,必须再次向自定义表授予 Alter 权限。
更多信息
在 Microsoft Dynamics NAV 中,如果整数 数据类型 字段或 BigInteger 数据类型 字段的 AutoIncrement 属性设置为"是",则相关字段应当由系统生成的唯一整数值自动填充。 用于填充字段的值会针对插入的每个新记录连续递增。
若要实现 AutoIncrement 属性,Microsoft Dynamics NAV SQL Server具有关联的 IDENTITY 属性的列。 IDENTITY 属性会导致SQL Server如前文所述自动填充列。 如果为特定列SQL Server IDENTITY 属性,则用户无法在 INSERT 语句中显式填充相关列,除非用户具有以下权限之一:
-
SQL Server 中的 SYSADMIN 服务器角色SQL Server
-
Microsoft db_owner NAV 数据库的数据库角色成员身份
-
Microsoft db_ddladmin NAV 数据库的数据库角色成员身份
除了拥有这些权限外,用户还必须运行以下命令,以便完成 INSERT 操作。
SET IDENTITY_INSERT <table_name>出现"症状"部分中提到的错误消息时,Microsoft Dynamics NAV 尝试在 SQL Server 中运行此 SET 语句。
显式填充具有 IDENTITY 属性的列的方法是通常不需要的方法。 通常,具有 IDENTITY 属性的列会自动填充SQL Server。