Access-länkad tabell SQL Server returnerar "#Deleted"

Anteckning

Office 365 ProPlus byter namn till Microsoft 365-appar för företag. Mer information om den här ändringen finns i det här blogginlägget.

Symptom

En Microsoft Access-länkad tabell som innehåller en eller flera datetime- eller datetime2-kolumner och som är ansluten till en Microsoft SQL Server-databas och har en kompatibilitetsnivå som är 130 eller högre (kompatibilitetsnivån för SQL Server 2016) returnerar #Deleted i resultatet.

När du försöker spara poständringar i den länkade tabellen kan du också få följande meddelande om skrivkonflikt:

Den här posten har ändrats av en annan användare sedan du började redigera den.

Orsak

Problemet uppstår eftersom kolumnerna datetime eller datetime2 innehåller värden för bråksekunder. Hur decimalsekunder hanteras för datetime2-typer har ändrats Microsoft SQL Server 2016. Mer information om ändringen finns i följande artiklar:

Anteckning

Datatypen datetime påverkas också av ändringen till datetime2, eftersom SQL Server ODBC-drivrutinen konverterar datetime till datetime2 när den skickar data till servern.

Lösning

Access introducerar en ny och förbättrad datum- & utökad datatyp som börjar i Microsoft 365-applikationer version 2010.

För att förbättra syntaxkompatibiliteten med SQL och för att öka noggrannheten och detaljnivån i poster som innehåller datum och tider implementerar Microsoft datatypen DateTime2 i Access. Den här datatypen innehåller ett större datumintervall (0001-01-01 till och med 9999-12-31) som har bättre tidsprecision (nanosekunder i stället för sekunder). Om du vill aktivera datatypen DateTime2 väljer du Nytt fältdatum & Utökad > tid. Mer information finns i Använda den utökade datatypen Datum/tid.

Anteckning

Datatypen Datum & utökad är inte kompatibel med tidigare versioner av Microsoft Access. Om datatypen implementeras i en lokal Access-tabell och Access-databasen används med en tidigare version som inte innehåller den här funktionen kan du därför inte öppna databasen.

Du kan aktivera eller inaktivera datatypen Utökad & datum och tid för länknings- och importåtgärder med alternativet Åtkomst till aktuell databas med alternativet Utökad datumtid (DateTime2) för länkade/uppdaterade tabeller. Mer information finns i Ange användaralternativ för den aktuella databasen.

Anteckning

Access har för närvarande inte stöd för användningen av datum& utökad tid som en del av den unika identifieraren/primärnyckeln för den länkade ODBC-tabellen. Om en eller flera kolumner som utgör den unika identifieraren för den länkade tabellen använder datatypen Datum & tid utökad och datumet innehåller decimaler kan posten visas som #Deleted.

Använd någon av följande metoder för att komma runt problemet för tidigare versioner av Access:

  • Ändra kompatibilitetsnivån för SQL Server till 120 (kompatibilitetsnivån för SQL Server 2014) eller mindre.
  • Kontrollera att datetime- och DateTime2-kolumnerna inte är en del av primärnyckeln.
  • Lägg till en ny kolumn i tabellen med hjälp av datatypen tidsstämpel eller rowversion.
  • Ta bort decimaler från datum/kolumner med en UPDATE-sats.
  • Ändra datatypen från datetime till smalldatetime. Obs! Då avrundas värdena till närmaste minut.
  • Om du inte behöver redigera data kan du skapa en fråga och ändra egenskapen RecordsetType till Ögonblicksbild som returnerar en skrivskyddad postuppsättning som inte påverkas av problemet.

Anteckning

Använd Länkhanteraren i Access för att se om de länkade tabellerna när några designändringar görs på SQL Server.