Symptomer
Når du forsøger at indsætte data i en brugerdefineret tabel, eller når du kører en proces, der indsætter data i en brugerdefineret tabel, modtager du en fejlmeddelelse, der ligner følgende:
Følgende SQL Server opstod under åbning af tabellen TableName:
1088, "42000", [Microsoft][ODBC SQL Server Driver][SQL Server]Kan ikke finde objektet "NAVDBName.dbo.CompanyName$ TableName", fordi den ikke findes, eller du ikke har tilladelser.
SQL: SET
IDENTITY_INSERT "NAVDBName"." dbo"." CompanyName$ TableName" ON
Bemærk! I dette eksempel repræsenterer TableName kundens Microsoft Dynamics NAV-tabel. NAVDBName repræsenterer kundens Microsoft Dynamics NAV-databasenavn. CompanyName repræsenterer kundens angivne firmanavn i Microsoft Dynamics NAV.
Dette problem kan opstå i versioner af Microsoft Dynamics NAV, der bruger Microsoft SQL Server databaseindstillingen.
Årsag
Dette problem opstår, hvis følgende forhold gør sig gældende:
-
I et af felterne i tabellen, der er angivet i fejlmeddelelsen, er egenskaben Autoincrement angivet til Ja.
-
Den INSERT-handling, du bruger eksplicit, udfylder det felt, hvor egenskaben Autoincrement er angivet til Ja.
-
Du har ikke en af følgende tilladelser:
-
Medlemskab af SYSADMIN-serverrollen i SQL Server
-
Den db_owner databaserollemedlemskab til Microsoft Dynamics NAV-databasen
-
Den db_ddladmin databaserollemedlemskab til Microsoft Dynamics NAV-databasen
-
Løsning
Du kan løse problemet ved at benytte en af følgende metoder.
Metode 1
Ændre INDSÆT-handlingen, så den ikke udfylder det felt, hvor egenskaben AutoIncrement er angivet til Ja.
Metode 2
Angiv egenskaben Autoincrement til Nej for det relevante felt.
Bemærk, at både metode 1 og metode 2 kan kræve hjælp fra en Microsoft Dynamics NAV-udvikler, især hvis ændringen kræver en kodeændring. Sådanne ændringer skal testes grundigt, før du anvender ændringerne på en live Microsoft Dynamics NAV-database.
Metode 3
Giv Alter-tilladelser for den brugerdefinerede tabel til den relevante programrolle (f.eks. &ndo$shadow, hvis du har valgt standardsikkerhedsmodellen) i SQL Server Management Studio.
Bemærk! Tilladelser, der tildeles manuelt til tabeller fra SQL Server Management Studio, overskrives, når du kører en sikkerhedssynkronisering i Microsoft Dynamics NAV. Derfor skal du give Alter-tilladelser til den brugerdefinerede tabel igen, når du har kørt sikkerhedssynkroniseringen.
Flere oplysninger
Hvis egenskaben AutoIncrement i Microsoft Dynamics NAV er angivet til Ja for et heltalsdatatypefelt eller for et BigInteger-datatypefelt, skulle det relevante felt automatisk blive udfyldt af en entydig heltalsværdi, der genereres af systemet. Den værdi, der bruges til at udfylde feltet, stiger fortløbende for hver ny post, der indsættes.
For at implementere egenskaben AutoIncrement definerer Microsoft Dynamics NAV en SQL Server kolonne, der har egenskaben IDENTITY knyttet til den. Egenskaben IDENTITY får SQL Server til automatisk at udfylde kolonnen som beskrevet tidligere. Hvis egenskaben IDENTITY er aktiveret for en SQL Server kolonne, kan brugerne ikke eksplicit udfylde den relevante kolonne i en INSERT-sætning, medmindre brugerne har en af følgende tilladelser:
-
Medlemskab af SYSADMIN-serverrollen i SQL Server
-
Den db_owner databaserollemedlemskab til Microsoft Dynamics NAV-databasen
-
Den db_ddladmin databaserollemedlemskab til Microsoft Dynamics NAV-databasen
Ud over at have disse tilladelser skal brugerne også køre følgende kommando for at handlingen INSERT kan udføres.
SET IDENTITY_INSERT <table_name> ONNår den fejlmeddelelse, der er nævnt i afsnittet "Symptomer", forekommer, forsøger Microsoft Dynamics NAV at køre denne SET-sætning i SQL Server.
Metoden til eksplicit at udfylde en kolonne, der har egenskaben IDENTITY, er en metode, der typisk ikke er påkrævet. De kolonner, der indeholder egenskaben IDENTITY, udfyldes som regel automatisk SQL Server.