41

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
4

8 に答える 8

59
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')
  ....
于 2012-12-11T11:04:25.123 に答える
30

私はこれがより簡単だと思います:

IF OBJECT_ID('SchemaName.MyConstraint', 'D') IS NULL
BEGIN
    -- create it here
END
于 2015-11-18T18:44:41.880 に答える
8

この単純なタスクがなぜそれほど複雑なのか、私は少し戸惑いました。私の場合、制約名はありません。テーブル名と列名だけです。追加する前に、デフォルトがすでにあるかどうかを確認したいと思います。

もう少し掘り下げた後、私はこれを思いついた:

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

これを巨大な定型文で実装する必要があるので、短いほど良いです。

于 2019-11-06T22:43:03.127 に答える
4
if not exists(select 1 from sys.default_constraints where name = 'SchemaName.MyConstraint')
begin
  -- create it here
end
于 2018-03-14T09:46:11.377 に答える
0

以下は、SQLServer2016で機能します。

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
于 2018-12-27T11:18:10.950 に答える
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
于 2019-05-13T14:45:31.437 に答える
0

データベースのデフォルトのコストレインが格納されているシステムテーブルを、スキーマ名なしで検索します。

IF EXISTS(SELECT 1 FROM sys.default_constraints WHERE [name] = 'MyConstraint')
    print 'Costraint exists!';
ELSE
    print 'Costraint doesn''t exist!';
于 2020-02-04T08:42:36.377 に答える
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]
于 2021-05-27T20:07:28.117 に答える