2013-07-06 8 views
6

mam następujące:Jak mogę sprawdzić, czy istnieje ograniczenie SQL Server?

IF OBJECT_ID(N'[dbo].[webpages_Roles_UserProfiles_Target]', 'xxxxx') IS NOT NULL 
    DROP CONSTRAINT [dbo].[webpages_Roles_UserProfiles_Target] 

Chcę być w stanie sprawdzić, czy istnieje ograniczenie istniejących przed upuść go. Używam powyższego kodu z typem "U" dla tabel.

Jak mogę zmienić powyższy kod (zmienić xxxx), aby sprawdziło istnienie ograniczenia?

Odpowiedz

20
SELECT 
    * 
    FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS 

albo spróbować

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' 

lub

IF EXISTS(SELECT 1 FROM sys.foreign_keys WHERE parent_object_id = OBJECT_ID(N'dbo.TableName')) 
BEGIN 
ALTER TABLE TableName DROP CONSTRAINT CONSTRAINTNAME 
END 
+0

Jeśli tabela ma PK, zrobić coś takiego IF EXISTS (SELECT nazwisko FROM sysobjects GDZIE xtype = 'PK' I parent_obj = OBJECT_ID ('TableName')) BEGIN ALTER TABLE nazwa_tabeli DROP CONSTRAINT CONSTRAINTNAME END –

2

można zrobić coś takiego:

IF EXISTS 
    (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[CONSTRAINT_NAME]') 
     AND type in (N'U')) 

BEGIN 
.... 
END 
ELSE 
+3

' wpisz w (N'U ') 'sprawdza istnienie tabeli [nie jest ograniczeniem] (http://msdn.microsoft.com/en-us/library/ms190324.aspx) –

+0

prawo Martin. Nie należy włączać (N'U ') do sprawdzania ograniczeń. –

+0

Typ (N'UQ ') byłby prawidłowy dla sprawdzenia typu unikalnego ograniczenia. –

3

Spróbuj coś takiego

IF OBJECTPROPERTY(OBJECT_ID('constraint_name'), 'IsConstraint') = 1 
    ALTER TABLE table_name DROP CONSTRAINT constraint_name 
+0

JEŚLI OBJECT_ID ("Nazwa pliku.nazwisko") JEST NULL ALTER TABLE Schema.tablename ADD CONSTRAINT keyname ... –

+0

@MartinB Tak, to wygląda na ładny skrót do "ADD CONSTRAINT"! Dla 'DROP CONSTRAINT' pomijanie' IsConstraint' sprawdź ryzyko 'ALTER TABLE', ponieważ' OBJECT_ID' zwróci wartość inną niż null, jeśli 'Schema.keyname' jest indeksem lub tabelą. – wqw

Powiązane problemy