Доступ к связанной таблице для SQL Server базы данных возвращает значение "#Deleted"

Симптом

Связанная таблица Microsoft Access, содержащая один или несколько столбцов datetime или datetime2, подключенная к базе данных Microsoft SQL Server и имеющая уровень совместимости 130 или выше (уровень совместимости для SQL Server 2016), возвращает #Deleted в результатах.

При попытке зафиксировать изменения записи в связанной таблице также может появиться следующее сообщение "Конфликт записи ".

Эта запись была изменена другим пользователем после начала редактирования.

Причина

Проблема возникает из-за того, что столбцы datetime или datetime2 содержат значения дробных секунд. Как обработка дробных секунд для типов datetime2 была изменена начиная с Microsoft SQL Server 2016 года. Дополнительные сведения об изменении см. в следующих статьях:

Note

На тип данных datetime также влияет переход на datetime2, поскольку драйвер ODBC для SQL Server преобразует datetime в datetime2 при отправке данных на сервер.

Резолюция

Access представляет новый улучшенный тип данных Дата & время (расширенный), начиная с версии 2010 Приложения Microsoft 365.

Для повышения совместимости синтаксиса с SQL и повышения точности и уровня детализации записей, включающих даты и время, Microsoft реализует тип данных DateTime2 в Access. Этот тип данных будет включать более крупный диапазон дат (0001-01-01–999-12-31), который имеет лучшую точность времени (наносекунды, а не секунды). Чтобы включить тип данных DateTime2, выберите Новое поле>Дата и время (расширенный). Дополнительные сведения см. в разделе Использование расширенного типа данных даты и времени.

Note

Тип данных Дата и время (расширенный) несовместим с предыдущими версиями Microsoft Access. В результате, если тип данных реализуется в локальной таблице Access, а база данных Access используется с предыдущей версией, которая не включает эту функцию, невозможно открыть базу данных.

Вы можете включить или отключить тип данных Дата/время (расширенный) для операций связывания и импорта с помощью параметра Access Текущая база данныхПоддерживать тип данных "Дата/время (расширенный)" (DateTime2) для связанных/импортированных таблиц. Дополнительные сведения см. в статье Настройка пользовательских параметров текущей базы данных.

Для более ранних версий Access используйте один из следующих методов, чтобы обойти эту проблему:

  • Измените уровень совместимости базы данных SQL Server на 120 (уровень совместимости для SQL Server 2014) или меньше.
  • Убедитесь, что столбцы datetime и DateTime2 не являются частью первичного ключа.
  • Добавьте в таблицу новый столбец, используя тип данных timestamp или rowversion.
  • Удалите дробные секунды из столбцов datetime с помощью инструкции UPDATE .
  • Измените тип данных с даты и времени на smalldatetime. Примечание. Это округляет значения до ближайшей минуты.
  • Если изменить данные не требуется, можно создать запрос и изменить свойство RecordsetType на Snapshot , которое вернет набор записей только для чтения, который не влияет на эту проблему.

Note

Используйте Диспетчер связанных таблиц в Access, чтобы обновить связанные таблицы после внесения любых изменений в их структуру на SQL Server.