Подтвердить что ты не робот

Как проверить, существует ли ограничение по умолчанию?

Я использую 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
4b9b3361

Ответ 1

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')
  ....

Ответ 2

Я считаю, что это проще:

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

Ответ 3

if not exists(select 1 from sys.default_constraints where name = 'SchemaName.MyConstraint')
begin
  -- create it here
end

Ответ 4

Следующее работает для меня на SQL Server 2016.

Предполагая, что у меня есть таблица с именем MY_TABLE и столбец MY_COLIUMN. Я хотел бы добавить ограничение (по умолчанию '-1') на MY_COLIUMN, для которого необходимо добавить ограничение.

/* 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

Ответ 5

Я использовал следующее в прошлом:

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