У меня есть этот sql:
ALTER TABLE dbo.ChannelPlayerSkins
DROP CONSTRAINT FK_ChannelPlayerSkins_Channels
но по-видимому, на некоторых других базах данных мы используем, ограничение имеет другое имя. Как я проверяю, существует ли ограничение с именем FK_ChannelPlayerSkins_Channels
.
попробуйте следующее:
SELECT
*
FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS
WHERE CONSTRAINT_NAME ='FK_ChannelPlayerSkins_Channels'
- РЕДАКТИРОВАТЬ -
Когда я первоначально отвечал на этот вопрос, я думал «Внешний ключ», потому что в исходном вопросе был задан вопрос о поиске «FK_ChannelPlayerSkins_Channels». С тех пор многие люди прокомментировали поиск других «ограничений», вот еще несколько запросов для этого:
--Returns one row for each CHECK, UNIQUE, PRIMARY KEY, and/or FOREIGN KEY
SELECT *
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS
WHERE CONSTRAINT_NAME='XYZ'
--Returns one row for each FOREIGN KEY constrain
SELECT *
FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS
WHERE CONSTRAINT_NAME='XYZ'
--Returns one row for each CHECK constraint
SELECT *
FROM INFORMATION_SCHEMA.CHECK_CONSTRAINTS
WHERE CONSTRAINT_NAME='XYZ'
вот альтернативный метод
--Returns 1 row for each CHECK, UNIQUE, PRIMARY KEY, FOREIGN KEY, and/or DEFAULT
SELECT
OBJECT_NAME(OBJECT_ID) AS NameofConstraint
,SCHEMA_NAME(schema_id) AS SchemaName
,OBJECT_NAME(parent_object_id) AS TableName
,type_desc AS ConstraintType
FROM sys.objects
WHERE type_desc LIKE '%CONSTRAINT'
AND OBJECT_NAME(OBJECT_ID)='XYZ'
Если вам нужно еще больше информации об ограничениях, загляните внутрь системной хранимой процедуры master. sys.sp_helpconstraint
, чтобы узнать, как получить определенную информацию. Для просмотра исходного кода с помощью SQL Server Management Studio войдите в «Обозреватель объектов». Оттуда вы расширяете базу данных «Мастер», затем расширяете «Программируемость», затем «Хранимые процедуры», затем «Системные хранимые процедуры». Затем вы можете найти «sys.sp_helpconstraint», щелкнуть его правой кнопкой мыши и выбрать «изменить». Только будьте осторожны, чтобы не сохранить в нем никаких изменений. Кроме того, вы можете просто использовать эту системную хранимую процедуру в любой таблице, например, EXEC sp_helpconstraint YourTableNameHere
.
Вы смотрите на что-то вроде этого, ниже тестируется в SQL Server 2005
SELECT * FROM sys.check_constraints WHERE
object_id = OBJECT_ID(N'[dbo].[CK_accounts]') AND
parent_object_id = OBJECT_ID(N'[dbo]. [accounts]')
INFORMATION_SCHEMA
- ваш друг. В нем есть все виды представлений, которые показывают все виды информации о схеме. Проверьте свои системные представления. Вы обнаружите, что у вас есть три представления, относящиеся к ограничениям, одно из которых CHECK_CONSTRAINTS
.