Triệu chứng
Khi bạn tìm cách chèn dữ liệu vào bảng tùy chỉnh hoặc khi bạn chạy quy trình chèn dữ liệu vào bảng tùy chỉnh, bạn nhận được thông báo lỗi tương tự như sau:
Lỗi sau SQL Server xảy ra trong khi truy nhập bảng TableName:
1088, "42000",[Microsoft][ODBC SQL Server Driver][SQL Server]Không thể tìm thấy đối tượng "NAVDBName.dbo.CompanyName$ TableName" vì nó không tồn tại hoặc bạn không có quyền.
SQL: SET
IDENTITY_INSERT "NAVDBName"." dbo"." CompanyName$ TableName" ON
Lưu ý Trong ví dụ này, TableName đại diện cho bảng Microsoft Dynamics NAV của khách hàng. NAVDBName đại diện cho tên cơ sở dữ liệu Microsoft Dynamics NAV của khách hàng. CompanyName đại diện cho tên công ty được chỉ định của khách hàng trong Microsoft Dynamics NAV.
Sự cố này có thể xảy ra trong các phiên bản Microsoft Dynamics NAV sử dụng tùy chọn cơ Microsoft SQL Server dữ liệu mới.
Nguyên nhân
Sự cố này sẽ xảy ra nếu các điều kiện sau là đúng:
-
Ở một trong các trường trong bảng được chỉ báo trong thông báo lỗi, thuộc tính AutoIncrement được đặt thành Yes.
-
Thao tác INSERT bạn sử dụng sẽ nhập rõ ràng trường có thuộc tính AutoIncrement được đặt thành Yes.
-
Bạn không có một trong các quyền sau đây:
-
Tư cách thành viên vai trò máy chủ SYSADMIN trong SQL Server
-
Tư cách db_owner cơ sở dữ liệu Người dùng nội bộ cho cơ sở dữ liệu Microsoft Dynamics NAV
-
Tư cách db_ddladmin cơ sở dữ liệu Người dùng nội bộ cho cơ sở dữ liệu Microsoft Dynamics NAV
-
Giải pháp
Để giải quyết sự cố này, sử dụng một trong các phương pháp sau.
Phương pháp 1
Sửa đổi thao tác INSERT để thao tác này không đưa vào trường có thuộc tính AutoIncrement được đặt thành Yes.
Phương pháp 2
Đặt thuộc tính AutoIncrement thành No cho trường liên quan.
Lưu ý Cả Phương pháp 1 và Phương pháp 2 có thể yêu cầu sự hỗ trợ của nhà phát triển Microsoft Dynamics NAV, đặc biệt khi bản sửa đổi yêu cầu thay đổi mã. Những thay đổi này cần được kiểm tra kỹ trước khi bạn áp dụng các thay đổi cho cơ sở dữ liệu Microsoft Dynamics NAV trực tiếp.
Phương thức 3
Cấp quyền Alter cho bảng tùy chỉnh đối với vai trò ứng dụng liên quan (ví dụ: &ndo$shadow, nếu bạn đã chọn mô hình bảo mật Tiêu chuẩn) trong SQL Server Management Studio.
Lưu ý Các quyền được cấp thủ công cho các bảng từ SQL Server Management Studio sẽ được ghi đè khi bạn chạy đồng bộ hóa bảo mật trong Microsoft Dynamics NAV. Do đó, bạn phải cấp lại quyền Alter đối với bảng tùy chỉnh sau khi bạn chạy đồng bộ hóa bảo mật.
Thông tin Bổ sung
Trong Microsoft Dynamics NAV, nếu thuộc tính AutoIncrement được đặt thành Có cho trường kiểu dữ liệu Số nguyên hoặc cho trường kiểu dữ liệu BigInteger, trường liên quan sẽ được hệ thống tự động nhập vào một giá trị số nguyên duy nhất do hệ thống tạo ra. Giá trị được dùng để nhập vào trường tăng dần liên tiếp cho mỗi bản ghi mới được chèn.
Để triển khai thuộc tính AutoIncrement, Microsoft Dynamics NAV xác định SQL Server cột có thuộc tính IDENTITY được liên kết. Thuộc tính IDENTITY khiến cột SQL Server tự động nhập vào cột như mô tả ở phần trước. Nếu thuộc tính IDENTITY được bật cho cột SQL Server thì người dùng sẽ không thể nhập rõ cột liên quan vào câu lệnh INSERT trừ khi người dùng có một trong các quyền sau đây:
-
Tư cách thành viên vai trò máy chủ SYSADMIN trong SQL Server
-
Tư cách db_owner cơ sở dữ liệu Người dùng nội bộ cho cơ sở dữ liệu Microsoft Dynamics NAV
-
Tư cách db_ddladmin cơ sở dữ liệu Người dùng nội bộ cho cơ sở dữ liệu Microsoft Dynamics NAV
Ngoài việc có những quyền này, người dùng cũng phải chạy lệnh sau đây để có thể hoàn tất thao tác INSERT.
SET IDENTITY_INSERT <table_name> ONKhi thông báo lỗi được đề cập trong mục "Triệu chứng" xảy ra, Microsoft Dynamics NAV đang cố gắng chạy câu lệnh SET này trong SQL Server.
Phương pháp nhập rõ ràng cột có thuộc tính IDENTITY là phương pháp thường không bắt buộc. Các cột có thuộc tính IDENTITY thường được nhập tự động bằng cách nhập SQL Server.