Как я могу 'DROP' и unamed отношения / ограничения в MS Access с SQL? - PullRequest
4 голосов
/ 12 августа 2010

У меня есть база данных Microsoft Access, и у меня есть две таблицы. Table1 имеет первичный ключ, а Table2 имеет внешний ключ, который ссылается на первичный ключ Table1. Это отношение устанавливается и отображается в средстве просмотра «Отношения» в MS Access, флажок «Принудить ссылочную целостность» установлен, а тип «Соединение» является внутренним соединением. Отношения:

[Таблица1] - 1 --------- N - [Table2]

Мне нужно иметь возможность «УДАЛИТЬ» это отношение / ограничение через SQL. Как мне это сделать? У меня нет названия для этого отношения / ограничения, так как оно было установлено в Access вручную, а не с SQL. Есть ли способ сделать то, что мне нужно сделать?

Ответы [ 4 ]

7 голосов
/ 12 августа 2010

Определите отношения, используя

ВЫБРАТЬ szRelationhip ОТ Msysrelationships WHERE szObject = 'childtablename' и szReferencedObject = 'parenttablename'

ТО

Используйте команду ALTER TABLE. Что-то вроде этого

ALTER TABLE Таблица2 СОДЕРЖАНИЕ КАПЛИ Отношение1

3 голосов
/ 12 августа 2010

Чтобы отбросить отношение, названное с помощью GUID, при названии отношений, созданных в окне отношений, необходимо использовать квадратные скобки, например:

ALTER TABLE TableName 
DROP CONSTRAINT [{0992AADA-3921-4AC0-8E95-745A87709D91}]

С помощью системной таблицы MsysRelationships не сложно найти название отношения, столбцы:

ccolumn
grbit
icolumn 
szColumn    
szObject    
szReferencedColumn  
szReferencedObject  
szRelationship

В вашем случае имя будет GUID, скажем, {A869FC34-81AF-4D29-B81D-74180BF73025}

Вы также можете использовать схемы VBA и ADO для отображения связей.

Если вы хотите сказать, что вам доступно, вам будет проще предложить подходящий способ получения имени.

РЕДАКТИРОВАТЬ в VBA

Sub ListRelations()
Dim rel As DAO.Relation

For Each rel In CurrentDb.Relations
    Debug.Print rel.Name
    Debug.Print rel.ForeignTable
    Debug.Print rel.Table
    For Each fld In rel.Fields
        Debug.Print fld.Name
    Next
Next
End Sub
1 голос
/ 12 августа 2010

Если вы видите его в средстве просмотра отношений, вы можете щелкнуть по нему и удалить его оттуда.

0 голосов
/ 12 октября 2017

Исследование таблицы в Visual Studio Server Explorer Я смог выбрать безымянное ограничение и удалить его (как предложено @Beth).Известно, VS сгенерированный скрипт с его именем:

GO
ALTER TABLE [dbo].[Organizations] DROP CONSTRAINT [FK__OrgDes__Langu__20C1E124];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...