Есть ли в Access эквивалент функции SQL Server NewId ()? - PullRequest
5 голосов
/ 03 марта 2009

Я написал операторы SQL (хранящиеся в текстовом документе), которые загружают данные в базу данных SQL Server. Эти заявления должны повторяться ежедневно. Некоторые операторы используют функцию NewId() для заполнения ключевого поля в базе данных, и это прекрасно работает. Пока я пишу приложение для репликации этих операторов, я хочу использовать запросы и макросы Access вместо копирования и вставки запросов в SQL Server, что позволяет мне экономить время на ежедневной основе. Все работает нормально, но я не могу найти функцию, которая заменит функцию SQL NewId(). Один существует или есть обход? Я использую SQL Server 2005 и Access 2007.

Ответы [ 4 ]

1 голос
/ 04 марта 2009

Помимо ответа Мэтта, вы можете просто использовать сквозной запрос и просто использовать существующие рабочие запросы из MS Access.

0 голосов
/ 20 апреля 2014

Решением будет включение функции stguidgen () в ваш код, как вы можете найти здесь:

0 голосов
/ 04 марта 2009

Опять, здесь, кажется, путаница.

Если я правильно понимаю:

У вас есть интерфейс доступа.

У вас есть серверная часть SQL Server 2005.

Что вам нужно, так это возможность генерировать GUID в таблице SQL Server. Таким образом, ответы, предлагающие добавить поле AutoNumber типа ReplicationID в Access, не помогут, так как таблица не является таблицей Jet, а таблицей SQL Server.

SQL, безусловно, можно выполнить как сквозной запрос, который передаст все на SQL Server для обработки, но мне интересно, почему в SQL Server нет значения по умолчанию для этого поля? Могут ли таблицы SQL Server 2005 не иметь NewId () в качестве значения по умолчанию? Или есть какой-то другой метод для заполнения поля новым GUID? Кажется, я вспомнил кое-что об использовании идентификаторов GUID и пометке их «не для репликации» (в настоящий момент у меня нет доступа к SQL Server, чтобы посмотреть это).

Мне кажется, лучше, чтобы механизм базы данных делал подобные вещи, а не выполнял функцию в вашем SQL для этого, но, возможно, кто-то может объяснить мне, почему я ошибаюсь в этом.

0 голосов
/ 03 марта 2009

Единственный обходной путь, о котором я могу подумать, - это определить столбец в вашей базе данных доступа типа «Идентификатор репликации» и сделать его полем с автоматическим номером. Это автоматически сгенерирует уникальный GUID для каждой строки, и вам вообще не нужно будет использовать newid (). В SQL-сервере вы просто должны сделать значение по умолчанию для столбца "newid ()".

...