Как проверить, существует ли Ограничение в SQL-сервере?

У меня есть этот sql:

ALTER TABLE dbo.ChannelPlayerSkins
    DROP CONSTRAINT FK_ChannelPlayerSkins_Channels

но по-видимому, на некоторых других базах данных мы используем, ограничение имеет другое имя. Как я проверяю, существует ли ограничение с именем FK_ChannelPlayerSkins_Channels.

247
задан KM. 28 September 2011 в 04:39
поделиться

3 ответа

попробуйте следующее:

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 .

331
ответ дан 23 November 2019 в 03:00
поделиться

Вы смотрите на что-то вроде этого, ниже тестируется в 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]')
19
ответ дан 23 November 2019 в 03:00
поделиться

INFORMATION_SCHEMA - ваш друг. В нем есть все виды представлений, которые показывают все виды информации о схеме. Проверьте свои системные представления. Вы обнаружите, что у вас есть три представления, относящиеся к ограничениям, одно из которых CHECK_CONSTRAINTS .

2
ответ дан 23 November 2019 в 03:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: