2012-12-11 39 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中的我很有用。 –