Simptome
Atunci când încercați să inserați date într-un tabel particularizat sau atunci când rulați un proces care inserează date într-un tabel particularizat, primiți un mesaj de eroare care seamănă cu următorul:
Următoarele erori SQL Server s-au produs în timpul accesării tabelului TableName:
1088, "42000", [Microsoft][Driver SQL Server ODBC][SQL Server]Imposibil de găsit obiectul "NAVDBName.dbo.CompanyName$ TableName", deoarece nu există sau nu aveți permisiuni.
SQL:
SETați IDENTITY_INSERT "NAVDBName"." dbo"." CompanyName$ TableName" ON
Notă În acest exemplu, TableName reprezintă tabelul Microsoft Dynamics NAV al clientului. NAVDBName reprezintă numele bazei de date Microsoft Dynamics NAV a clientului. CompanyName reprezintă numele de firmă desemnat al clientului în Microsoft Dynamics NAV.
Această problemă poate apărea în versiunile de Microsoft Dynamics NAV care utilizează Microsoft SQL Server bază de date.
Cauză
Această problemă apare dacă următoarele condiții sunt adevărate:
-
Într-unul dintre câmpurile din tabel care sunt indicate în mesajul de eroare, proprietatea AutoIncrement este setată la Da.
-
Operațiunea INSERT pe care o utilizați completează în mod explicit câmpul care are proprietatea AutoIncrement setată la Da.
-
Nu aveți una dintre următoarele permisiuni:
-
The SYSADMIN server role membership in SQL Server
-
The db_owner database role membership for the Microsoft Dynamics NAV database
-
The db_ddladmin database role membership for the Microsoft Dynamics NAV database
-
Rezolvare
Pentru a rezolva această problemă, utilizați una dintre următoarele metode.
Metoda 1
Modificați operațiunea INSERT astfel încât să nu completeze câmpul care are proprietatea AutoIncrement setată la Da.
Metoda 2
Setați proprietatea AutoIncrement la Nu pentru câmpul relevant.
Notă Atât metoda 1, cât și metoda 2 pot necesita asistența unui dezvoltator Microsoft Dynamics NAV, mai ales dacă amendamentul necesită o modificare de cod. Aceste modificări ar trebui testate în mod detaliat înainte de a aplica modificările la o bază de date Microsoft Dynamics NAV dinamică.
Metoda 3
Acordți permisiuni Alter pentru tabelul particularizat rolului relevant de aplicație (de exemplu, &ndo$shadow, dacă ați selectat modelul de securitate Standard) în SQL Server Management Studio.
Notă Permisiunile care sunt acordate manual tabelelor din tabele SQL Server Management Studio sunt suprascrise atunci când rulați o sincronizare de securitate în Microsoft Dynamics NAV. Prin urmare, trebuie să acordți din nou permisiunile Alter pentru tabelul particularizat după ce rulați sincronizarea de securitate.
Mai multe informații
În Microsoft Dynamics NAV, dacă proprietatea AutoIncrement este setată la Da pentru un câmp de tip de date Întreg sau pentru un câmp de tip de date BigInteger, câmpul relevant ar trebui să fie populat automat cu o valoare număr întreg unică care este generată de sistem. Valoarea care este utilizată pentru a popula câmpul se incrementează consecutiv pentru fiecare înregistrare nouă inserată.
Pentru a implementa proprietatea AutoIncrement, Microsoft Dynamics NAV definește o SQL Server care are proprietatea IDENTITY asociată. Proprietatea IDENTITY determină ca SQL Server populeze automat coloana, așa cum s-a descris anterior. Dacă proprietatea IDENTITY este activată pentru o coloană SQL Server, utilizatorii nu pot popula în mod explicit coloana relevantă într-o inserție INSERT decât dacă utilizatorii au una dintre următoarele permisiuni:
-
The SYSADMIN server role membership in SQL Server
-
The db_owner database role membership for the Microsoft Dynamics NAV database
-
The db_ddladmin database role membership for the Microsoft Dynamics NAV database
Pe lângă faptul că au aceste permisiuni, utilizatorii trebuie, de asemenea, să ruleze următoarea comandă pentru ca operațiunea INSERT să fie finalizată.
SETați IDENTITY_INSERT <table_name> PEAtunce apare mesajul de eroare menționat în secțiunea "Simptome", Microsoft Dynamics NAV încearcă să ruleze această insecție SET în SQL Server.
Metoda de populare explicită a unei coloane care are proprietatea IDENTITY este o metodă care nu este de obicei necesară. Coloanele care au proprietatea IDENTITY sunt populate de obicei automat SQL Server.