Мне нужно удалить таблицу с высокими ссылками в базе данных SQL Server. Как я могу получить список всех ограничений внешнего ключа, которые мне нужно будет удалить, чтобы удалить таблицу?
(SQL-ответы предпочтительнее, чем щелкать в графическом интерфейсе студии управления.)
sql
sql-server
tsql
chillitom
источник
источник
Ответы:
Не знаю, почему никто не предложил, но я использую
sp_fkeys
для запроса внешних ключей для данной таблицы:Вы также можете указать схему:
Без указания схемы документы сообщают следующее:
источник
Я бы использовал функцию создания диаграмм базы данных в SQL Server Management Studio, но так как вы исключили это - это сработало для меня в SQL Server 2008 (нет 2005).
Получить список ссылающихся таблиц и имен столбцов ...
Чтобы получить имена ограничений внешнего ключа
источник
Это дает вам:
Код ниже:
источник
order by
: KeyTableSchemaName, KeyTableName, KeyColumnName, FkTableSchemaName, FkTableName, FkName и f) изменяют порядок столбцов на: KeyTableSchemaName, KeyTableName, KeyColumnName, FkTableSchemaName, FKTableName / Практическое имя / имя-класса, имя_компонента, имя_компонента, имя_символа, имя_файма условные обозначения и d / e для наиболее вероятного использования (перечисление FK-зависимостей aTable
).Попробуй это :
источник
Вы также должны учитывать ссылки на другие объекты.
Если на таблицу ссылались другие таблицы, то, вероятно, на нее также ссылаются другие объекты, такие как представления, хранимые процедуры, функции и многое другое.
Я бы действительно порекомендовал GUI-инструмент, такой как диалоговое окно «Просмотр зависимостей» в SSMS, или бесплатный инструмент, такой как ApexSQL. Ищите его, потому что поиск зависимостей в других объектах может быть подвержен ошибкам, если вы хотите делать это только с SQL.
Если SQL является единственным вариантом, вы можете попробовать сделать это следующим образом.
источник
Первоначальный вопрос попросил получить список всех внешних ключей в таблицу с высокими ссылками, чтобы ее можно было удалить.
Этот маленький запрос возвращает все команды «удаления внешнего ключа», необходимые для удаления всех внешних ключей в конкретную таблицу:
Пример вывода:
Опустите предложение WHERE, чтобы получить команды удаления для всех внешних ключей в текущей базе данных.
источник
Вот код SQL, который я бы использовал.
Это не совсем понятный SQL, поэтому давайте рассмотрим пример.
Итак, предположим, что я хотел удалить
Employees
таблицу из любимойNorthwind
базы данных Microsoft , но SQL Server сказал мне, что один или несколько внешних ключей мешают мне сделать это.Команда SQL выше вернет эти результаты ...
Это показывает мне, что есть 3 внешних ключа, которые ссылаются на
Employees
таблицу. Другими словами, мне не разрешили бы удалить (удалить) эту таблицу, пока эти три Внешних ключа не будут сначала удалены.В результатах первая строка показывает, как в результатах будет показано следующее ограничение внешнего ключа.
В последнем столбце показана команда SQL, которую мне нужно будет использовать для удаления одного из этих внешних ключей, например:
... и правый столбец показывает SQL для его создания ...
Со всеми этими командами у вас есть все необходимое для удаления соответствующих внешних ключей, чтобы вы могли удалить таблицу, а затем воссоздать их позже.
Уф. Надеюсь это поможет.
источник
источник
Самый простой из них - использование sys.foreign_keys_columns в SQL. Здесь таблица содержит идентификаторы объектов всех внешних ключей по идентификатору ссылочной колонки, идентификатору ссылочной таблицы, а также ссылочным столбцам и таблицам. Поскольку идентификатор остается постоянным, результат будет надежным для дальнейших изменений в схеме, а также в таблицах.
Запрос:
Мы также можем добавить фильтр, используя «где»
источник
источник
Я использую этот скрипт, чтобы найти все детали, связанные с внешним ключом. Я использую INFORMATION.SCHEMA. Ниже приведен SQL-скрипт:
источник
Первый
Затем используйте NimbleText, чтобы поиграть с вашими результатами
источник
Несколько хороших ответов выше. Но я предпочитаю иметь ответ с одним запросом. Этот кусок кода взят из sys.sp_helpconstraint (sys proc)
Вот так Microsoft смотрит, если есть внешние ключи, связанные с таблицей.
Ответ будет выглядеть так: test_db_name.dbo.Account: FK_Account_Customer
источник
select db_name() + '.' + schema_name(ObjectProperty(parent_object_id,'schemaid')) + '.' + object_name(parent_object_id) + ': ' + object_name(object_id) AS "FK Reference" from sys.foreign_keys where referenced_object_id = object_id('Customer')
Если вы хотите получить отношение внешнего ключа всех таблиц, исключите
where
предложение, иначе напишите ваше имя таблицы вместоtablename
источник
Это показывает только связь, если есть ограничения внешнего ключа. Моя база данных, очевидно, предшествует ограничению FK. Некоторые таблицы используют триггеры для обеспечения ссылочной целостности, а иногда нет ничего, кроме столбца с аналогичным именем, чтобы указать отношение (и вообще никакой ссылочной целостности).
К счастью, у нас есть единая сцена именования, поэтому я могу найти ссылки на таблицы и представления следующим образом:
Я использовал этот выбор в качестве основы для генерации скрипта, который делает то, что мне нужно сделать для связанных таблиц.
источник
Отрабатывая то, что сделал @Gishu, я смог произвести и использовать следующий SQL в SQL Server 2005
Который отображает таблицы, столбцы и имена внешних ключей все в 1 запрос.
источник
Определить первичные ключи и уникальные ключи для всех таблиц в базе данных ...
Это должно перечислить все ограничения, и в конце вы можете поставить свои фильтры
Для справки, пожалуйста, прочитайте - http://blogs.msdn.com/b/sqltips/archive/2005/09/16/469136.aspx
источник
Я использую это в 2008 году и выше. Это похоже на некоторые другие перечисленные решения, но имена полей правильно обрабатываются для обработки сопоставлений с учетом регистра (LatBin). Кроме того, вы можете указать одно имя таблицы и получить только информацию для этой таблицы.
источник
Существует способ подсчета всех обязанностей для выбранного идентификатора. Просто измените значение @dbTableName, значение @dbRowId и его тип (если int вам нужно удалить '' в строке № 82 (..SET @SQL = ..)). Наслаждаться.
источник
Mysql сервер имеет
information_schema.REFERENTIAL_CONSTRAINTS
таблицу FYI, вы можете отфильтровать ее по имени таблицы или по названию таблицы.источник
Список всех внешних ключей, ссылающихся на данную таблицу в SQL Server:
Вы можете получить имя таблицы ссылок и имя столбца с помощью следующего запроса ...
И следующий скриншот для вашего понимания ...
источник
Это получает любой внешний ключ, который включает выбранную таблицу. * Предполагает формат _FIRSTABLENAME_SECONDTABLENAME.
Это более общая форма:
источник
Следующее решение работает для меня:
источник
Вы можете найти через запрос ниже:
источник
Также попробуйте.
с
sp_fkeys
вами может фильтровать результат, не только рк имени таблицы и схемы , но и с Рк именем таблицы и схемы. ссылка на сайтисточник
Самый предпочтительный ответ от @BankZ
дополнительно для другой схемы
источник