2012-12-11 13 views
19

Sto utilizzando SQL Server 2008. Devo trovare se il vincolo del valore predefinito non esiste, quindi crearlo. Ecco cosa ho provato.Come verificare se il vincolo di valore predefinito IF non esiste?

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 

risposta

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

Come di SQL Server 2005, si consiglia di utilizzare le viste del catalogo dallo schema 'sys' -' sys.columns', 'sys.tables' - invece di' sysobjects' ecc. Questi saranno rimossi da una versione futura di SQL Server –

+0

@marc_s Ho cambiato il codice, ma le viste di compatibilità 'sysobjects' ecc saranno in giro per un ** lungo ** tempo ancora, almeno dopo la prossima versione di SQL Server. _Le seguenti funzionalità del Motore di database di SQL Server sono supportate nella ** prossima ** versione di SQL Server, ma verranno rimosse in una versione successiva. La versione specifica di SQL Server non è stata determinata._ [Link] (http://msdn.microsoft.com/en-us/library/ms143729.aspx) – RichardTheKiwi

+1

@RichardTheKiwi - Il tuo collegamento include come terza frase "Obsoleto le funzionalità non dovrebbero essere utilizzate in nuove applicazioni. " –

16

Trovo che questo sia più facile:

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

Questo non ha funzionato per me in SQL Server 2014. – ryascl

+3

Questo ha funzionato per me in SQL Server 2014. –

Problemi correlati