Я пытаюсь удалить таблицу, но получаю следующее сообщение:
Msg 3726, уровень 16, состояние 1, строка 3
Не удалось удалить объект dbo.UserProfile, поскольку на него ссылается ограничение FOREIGN KEY.
Msg 2714, уровень 16, состояние 6, строка 2
В базе данных уже есть объект с именем «UserProfile».
Я осмотрелся с помощью SQL Server Management Studio, но не могу найти ограничение. Как узнать ограничения внешнего ключа?
sql
sql-server
sql-server-2008
marc_s
источник
источник
Worth noticing:
Ответ от @LittleSweetSeas вернет информацию о внешних ключах для данной ссылочной таблицы , однако детали ответа @ Gayathri-Varma для данной родительской таблицы . Оба они полезны в разных условиях и оба выигрывают свои гонки :-)Ответы:
Вот:
Таким образом вы получите справочную таблицу и имя столбца.
Отредактировано для использования sys.tables вместо общих sys.objects в соответствии с предложением комментария. Спасибо, marc_s
источник
sys.tables
а неsys.objects
INNER JOIN sys.objects AS o ON o.OBJECT_ID = fc.referenced_object_id
наINNER JOIN sys.tables t ON t.OBJECT_ID = fc.referenced_object_id
Другой способ - проверить результаты
(или просто выделите указанное TableName и нажмите ALT + F1)
Со временем я просто решил уточнить свой ответ. Ниже приведен снимок экрана с результатами
sp_help
. A использовали базу данных AdventureWorksDW2012 для этого примера. Там много полезной информации, и то, что мы ищем, находится в самом конце - выделено зеленым:источник
Попробуй это
источник
name
возвращаемое значение - это внутреннее имя (мне кажется), а не фактическое имя столбца в родительской таблице. Как это исправить?ParentTableName
что всегда будет таким же, как задано 'Tablename
' в предложении where (если включено). Это может быть сделано намеренно и будет более полезно при запросе более чем одной таблицы.Я нашел этот ответ довольно простым и сделал трюк для того, что мне нужно: qaru.site/questions/435 / ... / 12956348/652519
Резюме по ссылке, используйте этот запрос:
Быстро и просто. Мне удалось довольно быстро найти все таблицы внешних ключей, соответствующие столбцы и имена внешних ключей 15 таблиц.
Как отмечает @mdisibio ниже, вот ссылка на документацию, в которой подробно описаны различные параметры, которые можно использовать: https://docs.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sp- - функциональные кнопки Transact-SQL
источник
EXEC sp_fkeys 'Payroll', 'accounting'
Я использую этот сценарий, чтобы найти все подробности, связанные с внешним ключом. Я использую INFORMATION.SCHEMA. Ниже представлен сценарий SQL:
источник
если вы хотите перейти через SSMS в окне обозревателя объектов, щелкните правой кнопкой мыши объект, который вы хотите удалить, и просмотрите зависимости.
источник
Вот лучший способ узнать отношения внешних ключей во всех базах данных.
и еще один способ
источник
exec sp_helpconstraint 'Table Name'
единственное решение, которое для меня вообще возвращает какие-либо строки. Однако название противопоказания - тарабарщина.PRIMARY KEY (clustered) PK__org_soft__3213E83FE6B07364
источник
- Следующее может дать вам больше того, что вы ищете:
источник
Вы также можете вернуть всю информацию о
Foreign Keys
, адаптировав ответ @LittleSweetSeas:источник
В SQL Server Management Studio вы можете просто щелкнуть правой кнопкой мыши по таблице в проводнике объектов и выбрать «Просмотр зависимостей». Это даст вам хорошую отправную точку. Он показывает таблицы, представления и процедуры, которые ссылаются на таблицу.
источник
попробуйте следующий запрос.
это даст имя_ограничения, имена_столбцов, которые будут ссылаться, и таблицы, которые будут в зависимости от ограничения, будут там.
источник
Вы можете использовать этот запрос для отображения
Foreign key
ограничений:Взято из http://blog.sqlauthority.com/2006/11/01/sql-server-query-to-display-foreign-key-relationships-and-name-of-the-constraint-for-each-table- в-базы данных /
источник
Самый простой способ получить
Primary Key
иForeign Key
для стола:источник
В обозревателе объектов разверните таблицу и разверните ключи:
источник