복붙노트

[SQL] 당신은 어떻게 T-SQL에서 기본 값 또는 유사한 제약 조건을 삭제합니까?

SQL

당신은 어떻게 T-SQL에서 기본 값 또는 유사한 제약 조건을 삭제합니까?

나는 구문을 알고있다 :

ALTER TABLE [TheTable] DROP CONSTRAINT [TheDefaultConstraint]

하지만 어떻게 내가 그 이름을 모르는 기본 제약 조건을 삭제하려면? (즉,이를 CREATE TABLE 시간에 자동 생성 된입니다.)

해결법

  1. ==============================

    1.이 수동으로 작업을 수행하려는 경우, 당신은 (제약 조건은 테이블 내에서 노드에서) 그것을 찾기 위해 Management Studio를 사용할 수 있습니다.

    이 수동으로 작업을 수행하려는 경우, 당신은 (제약 조건은 테이블 내에서 노드에서) 그것을 찾기 위해 Management Studio를 사용할 수 있습니다.

    SQL을 사용하여 작업을 수행하려면 :

    당신은 당신이 사용하고있는 SQL 서버의 버전 말을하지 않습니다. 두 SQL 2005 및 SQL 2008 위의 작동합니다.

  2. ==============================

    2.당신은 자동으로 수행하는이 코드를 사용할 수 있습니다 :

    당신은 자동으로 수행하는이 코드를 사용할 수 있습니다 :

    DECLARE @tableName VARCHAR(MAX) = '<MYTABLENAME>'
    DECLARE @columnName VARCHAR(MAX) = '<MYCOLUMNAME>'
    DECLARE @ConstraintName nvarchar(200)
    SELECT @ConstraintName = Name 
    FROM SYS.DEFAULT_CONSTRAINTS
    WHERE PARENT_OBJECT_ID = OBJECT_ID(@tableName) 
    AND PARENT_COLUMN_ID = (
        SELECT column_id FROM sys.columns
        WHERE NAME = @columnName AND object_id = OBJECT_ID(@tableName))
    IF @ConstraintName IS NOT NULL
        EXEC('ALTER TABLE '+@tableName+' DROP CONSTRAINT ' + @ConstraintName)
    

    그냥 적절하게 대체합니다.

  3. ==============================

    3.또는 당신은 sys.check_constraints 카탈로그 뷰를 사용하여 찾을 수 있습니다.

    또는 당신은 sys.check_constraints 카탈로그 뷰를 사용하여 찾을 수 있습니다.

  4. ==============================

    4.당신은 sp_help는 [테이블 이름]에 의해 제약의 이름을 찾은 다음 이름을 삭제할 수 있습니다.

    당신은 sp_help는 [테이블 이름]에 의해 제약의 이름을 찾은 다음 이름을 삭제할 수 있습니다.

    또는 당신은 아마 관리 스튜디오를 통해이 작업을 수행 할 수 있습니다.

  5. ==============================

    5.한 줄의 사용 단일 테이블과 열은 다음

    한 줄의 사용 단일 테이블과 열은 다음

    declare @sql nvarchar(max); set @sql = ''; SELECT @sql+='ALTER TABLE [dbo].[YOURTABLENAME] DROP CONSTRAINT ' + ((SELECT OBJECT_NAME(constid) FROM sysconstraints WHERE OBJECT_NAME(id) = 'YOURTABLENAME'AND colid IN (SELECT ORDINAL_POSITION FROM INFORMATION_SCHEMA.COLUMNS Where Table_Name = 'YOURTABLENAME' and COLUMN_NAME = 'YOURCOLUMNNAM'))) + ';'; EXEC sp_executesql @sql;
    

    당신이 컬럼에 여러 제약이있는 경우 당신은 당신이 후에있는 제약 조건에 차별을해야합니다,하지만 당신은 단지 기본 제약 조건이있는 경우이 트릭을 할 것입니다.

    당신이 더 차별을 할 수 있도록 INFORMATION_SCHEMA에서 사용할 수있는 다른 열을 확인하십시오.

  6. ==============================

    6.(SQL 표준 제안과 같다 일부 다른 데이터베이스 그렇게하는 것 같은) (있는 경우) 기본 제약과 영향을받는 모든 점검 제한 조건 - 여기 내 모든 종속 제약 조건을 삭제 자신의 버전을 간다

    (SQL 표준 제안과 같다 일부 다른 데이터베이스 그렇게하는 것 같은) (있는 경우) 기본 제약과 영향을받는 모든 점검 제한 조건 - 여기 내 모든 종속 제약 조건을 삭제 자신의 버전을 간다

    declare @constraints varchar(4000);
    declare @sql varchar(4000);
    with table_id_column_position as (
       select object_id table_id, column_id column_position
          from sys.columns where object_id is not null and object_id = object_id('TableName') and name = 'ColumnToBeDropped'
    )
    select @constraints = coalesce(@constraints, 'constraint ') + '[' + name + '], '
    from sysobjects 
    where (
      -- is CHECK constraint
      type = 'C' 
      -- dependeds on the column
      and id is not null
      and id in (
          select object_id --, object_name(object_id)
          from sys.sql_dependencies, table_id_column_position 
          where object_id is not null
          and referenced_major_id = table_id_column_position.table_id
          and referenced_minor_id = table_id_column_position.column_position
        )
    ) OR (
      -- is DEFAULT constraint
      type = 'D'
      and id is not null
      and id in (
        select object_id
        from sys.default_constraints, table_id_column_position
         where object_id is not null
         and parent_object_id = table_id_column_position.table_id
         and parent_column_id = table_id_column_position.column_position
      )
    );
    set @sql = 'alter table TableName drop ' + coalesce(@constraints, '') + ' column ColumnToBeDropped';
    exec @sql
    

    (주의 : TABLENAME 및 ColumnToBeDropped 모두가 위의 코드에 두 번 표시)

    이것은 하나의 ALTER TABLE TABLE_NAME DROP CONSTRAINT의 C1, ..., COLUMN 열 ToBeDropped을 구성하고 실행하여 작동합니다.

  7. from https://stackoverflow.com/questions/1123060/how-do-you-drop-a-default-value-or-similar-constraint-in-t-sql by cc-by-sa and MIT license