我正在使用SQL Server 2008.我需要找到默认值约束是否不存在然后创建它。这是我尝试过的。
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
答案 0 :(得分:45)
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')
....
答案 1 :(得分:21)
我发现这更容易:
IF OBJECT_ID('SchemaName.MyConstraint', 'D') IS NULL
BEGIN
-- create it here
END
答案 2 :(得分:0)
if not exists(select 1 from sys.default_constraints where name = 'SchemaName.MyConstraint')
begin
-- create it here
end
答案 3 :(得分:0)
以下内容适用于SQL Server 2016。
假设我有一个名为MY_TABLE的表和一个MY_COLIUMN列。 我想在MY_COLIUMN上添加一个约束(默认为'-1'),需要在上面添加约束。
/* Test for the specific column */
IF EXISTS (select 1 from sys.all_columns c where c.object_id= OBJECT_ID(N'MY_TABLE') and c.name='MY_COLIUMN')
BEGIN
/* Add default if not exits */
IF NOT EXISTS (
select 1 from sys.default_constraints c where c.object_id =
(
select default_object_id from sys.all_columns c where c.object_id = OBJECT_ID(N'MY_TABLE') and c.name='MY_COLIUMN'
)
)
BEGIN
ALTER TABLE MY_TABLE
ADD DEFAULT '-1' FOR MY_COLIUMN;
END
END
GO
答案 4 :(得分:0)
我过去曾使用以下内容:
DECLARE @default sysname
SELECT @default = object_name( cdefault ) FROM syscolumns WHERE id = object_id( 'DBO.TABLE' ) AND name = 'COLUMN'
IF ( not @default is null )
BEGIN
...
END
答案 5 :(得分:0)
我对为什么这个简单的任务如此复杂感到有些困惑。就我而言,我没有约束名称-只有表和列名称。我想在尝试添加默认值之前检查它们是否已经具有默认值。
经过进一步的挖掘,我想到了:
IF (SELECT Column_Default FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'MY_TABLE' AND COLUMN_NAME = 'MY_COLUMN') is NULL
BEGIN
ALTER TABLE [dbo].[MY_TABLE]
ADD DEFAULT ('') FOR [MY_COLUMN]
END
GO
我必须在一个巨大的样板脚本中实现它,所以越短越好。
答案 6 :(得分:0)
搜索存储数据库默认成本消耗的系统表,不带模式名称:
IF EXISTS(SELECT 1 FROM sys.default_constraints WHERE [name] = 'MyConstraint')
print 'Costraint exists!';
ELSE
print 'Costraint doesn''t exist!';
答案 7 :(得分:0)
我知道我来晚了,但我是 OBJECTPROPERTY 的忠实粉丝。如果默认值尚不存在,以下是如何在列上设置默认值 1。
IF (OBJECTPROPERTY(OBJECT_ID('My_constraint_name'),'CnstIsColumn') IS NULL
ALTER TABLE Mytable ADD CONSTRAINT [MY_constraint_name] DEFAULT ((1)) FOR [My_column_name]