2012-12-11 35 views
19

我正在使用sql server 2008.我需要找到如果默認值約束不存在然後創建它。這是我嘗試過的。如何檢查IF默認值約束是否存在?

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 

回答

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

與SQL Server 2005,建議使用來自'sys'架構目錄視圖 - 'sys.columns', 'sys.tables' - 而不是'sysobjects'等。這些將從未來版本的SQL Server中刪除 –

+0

@marc_s我已經更改了代碼,但是'sysobjects'等兼容性視圖將會出現**長**時間尚未到來,至少要經過SQL Server的下一個版本。 _ **下一個**版本的SQL Server支持以下SQL Server數據庫引擎功能,但將在更高版本中刪除。 SQL Server的特定版本尚未確定。[鏈接](http://msdn.microsoft.com/zh-cn/library/ms143729.aspx) – RichardTheKiwi

+1

@RichardTheKiwi - 您的鏈接確實包含第三句「已棄用功能不應該用於新的應用程序。「 –

16

我覺得這是比較容易:

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

這在SQL Server 2014中不適用於我。 – ryascl

+3

這對SQL Server 2014中的我很有用。 –