#sql #ms-access
Вопрос:
У меня есть база данных с несколькими таблицами, в которую я хочу добавить первичные ключи в любой столбец с ключевым словом «КЛЮЧ» в его названии. Первая проблема, которая кажется неразрешимой, заключается в выполнении запроса ко всем таблицам, а не по одной… Во-вторых, я не вижу, как я могу добавить первичный ключ или даже снять ограничения при поиске по столбцам с подстановочными знаками.
Для тех из вас, кто обладает зрением, это то, чего я пытаюсь достичь:
ALTER TABLE *
ADD PRIMARY KEY (%KEY%);
Имейте в виду, что к некоторым таблицам уже прикреплены первичные ключи, поэтому мне, возможно, придется сначала снять ограничения для всех, а затем повторно ограничить их. Если это вообще возможно?
Комментарии:
1. «выполните запрос ко всем таблицам, а не по одной»
ALTER TABLE
Оператор доступа может быть нацелен только на одну таблицу.2. Включает ли какая-либо из ваших целевых таблиц поле с автономером, имя которого не содержит «КЛЮЧ»? Если да, то что должно произойти с этими полями?
3. Это не так. Все они имеют автономер и являются единственными столбцами со строкой «Ключ» в них.
4. ОК. Похоже, вы надеялись сделать все это с помощью Access DDL, но это невозможно. Вам понадобится DAO для изучения таблиц, чтобы определить, какие из них необходимо изменить.
5. Нет, вы не можете использовать сопоставление имени поля с шаблоном в Access DDL; это должно быть буквальное имя поля.
Ответ №1:
Если вы хотите определить существующие поля автономера в качестве первичного ключа, рассмотрите:
ALTER TABLE tablename ADD CONSTRAINT fieldname PRIMARY KEY(fieldname)
Однако поле уже не может быть задано с индексом, а таблица не может уже иметь первичный ключ. Снова используйте ALTER TABLE для удаления индекса.
ALTER TABLE tablename DROP CONSTRAINT indexname
Придется запускать этот SQL для каждой таблицы, которую необходимо изменить. Если это одноразовое требование (почему бы и нет?), вероятно, так же быстро открыть каждую таблицу и вручную изменить дизайн.
Документация MS https://docs.microsoft.com/en-us/office/client-developer/access/desktop-database-reference/alter-table-statement-microsoft-access-sql
Альтернативой является VBA, использующий TableDefs для изменения структуры таблицы. Поищите в Интернете примеры.
Комментарии:
1. Я изучал VBA и мог бы попытаться собрать что-нибудь воедино. Когда я пытаюсь отбросить ограничения, я получаю «ПРОВЕРКА ограничения «STOCK_KEY» не существует. Однако я ясно вижу, что в этой таблице в качестве первичного ключа указан столбец «STOCK_KEY».
ALTER TABLE STOCK DROP CONSTRAINT STOCK_KEY
2. Ну, все, что я могу сказать, это то, что это работает на меня. Вы уверены, что индекс поля имеет то же имя?
3. Индексы первичных ключей по умолчанию имеют имя
PrimaryKey
, а не имя поля. Откройте таблицу в режиме конструктора и откройте окно Индексы. @КевинП.4. Это было правильное имя поля, у меня была выбрана другая таблица (выполнялся запрос в неправильной таблице…)
5. @KevinP., хорошо, да, теперь я это понимаю. В моем тесте ОГРАНИЧЕНИЯ ДОБАВЛЕНИЯ я назначил имя поля в качестве имени индекса, потому что все остальное не сработало.