2012-12-11 14 views
19

Używam serwera sql 2008. Muszę znaleźć, jeśli ograniczenie wartości domyślnej nie istnieje, a następnie go utworzyć. Oto, co próbowałem.Jak sprawdzić, czy ograniczenie wartości domyślnej nie istnieje?

IF (NOT EXISTS(SELECT * FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS WHERE CONSTRAINT_NAME ='MyConstraint')) 
BEGIN 
    ALTER TABLE [XX] ADD CONSTRAINT [MyConstraint] DEFAULT ((-1)) FOR [XXXX] 
END 
GO 

Odpowiedz

38
if not exists (
    select * 
     from sys.all_columns c 
     join sys.tables t on t.object_id = c.object_id 
     join sys.schemas s on s.schema_id = t.schema_id 
     join sys.default_constraints d on c.default_object_id = d.object_id 
    where t.name = 'table' 
     and c.name = 'column' 
     and s.name = 'schema') 
    .... 
+3

Począwszy od SQL Server 2005, zaleca się, aby użyć katalogu widoki z 'sys' schematu -' sys.columns', 'sys.tables' - zamiast' sysobjects' itd. Zostaną one usunięte z przyszłej wersji SQL Server –

+0

@ marc_s Zmieniono kod, ale widoki kompatybilności 'sysobjects' etc będą dostępne przez około ** ** jeszcze raz, przynajmniej po następnej wersji SQL Server. Następujące funkcje aparatu bazy danych SQL Server są obsługiwane w ** następnej ** wersji programu SQL Server, ale zostaną usunięte w nowszej wersji. Konkretna wersja programu SQL Server nie została określona. [Link] (http://msdn.microsoft.com/en-us/library/ms143729.aspx) – RichardTheKiwi

+1

@RichardTheKiwi - Twój link zawiera jako trzecie zdanie "Przestarzałe" funkcje nie powinny być używane w nowych aplikacjach. " –

16

Uważam, że jest to łatwiejsze:

IF OBJECT_ID('SchemaName.MyConstraint', 'D') IS NULL 
BEGIN 
    -- create it here 
END 
+2

To nie działa dla mnie w SQL Server 2014. – ryascl

+3

To działało dla mnie w SQL Server 2014. –

Powiązane problemy