복붙노트

[SQL] 디폴트 값으로 테이블에 열을 추가 기존 컬럼의 값과 동일

SQL

디폴트 값으로 테이블에 열을 추가 기존 컬럼의 값과 동일

어떻게 기존의 컬럼의 값과 같은 기본 값으로 SQL Server 테이블에 열을 추가하려면?

나는이 T-SQL 문을 시도했다 :

ALTER TABLE tablename 
ADD newcolumn type NOT NULL DEFAULT (oldcolumn) 

그러나 그것은 오류를주고 :

해결법

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

    1.이 시도:

    이 시도:

    ALTER TABLE tablename ADD newcolumn type NOT NULL DEFAULT (0)
    Go
    Update tablename SET newcolumn = oldcolumn Where newcolumn = 0
    Go
    
  2. ==============================

    2.난 아주 많이 그들처럼하지 않습니다 그러나 여기 당신이 AFTER 삽입 트리거와 함께이 작업을 수행 할 수있는 방법입니다 :

    난 아주 많이 그들처럼하지 않습니다 그러나 여기 당신이 AFTER 삽입 트리거와 함께이 작업을 수행 할 수있는 방법입니다 :

    CREATE TRIGGER TableX_AfterInsert_TRG 
      ON TableX 
    AFTER INSERT
    AS
      UPDATE TableX AS t
      SET t.newcolumn = t.oldcolumn
      FROM Inserted AS i
      WHERE t.PK = i.PK ;              -- where PK is the PRIMARY KEY of the table   
    
  3. ==============================

    3.애프터 INSERT 트리거 방식으로 인해 추가 UPDATE 문에 오버 헤드를 포함한다. 다음과 같이 나는 INSTEAD INSERT의 트리거를 사용하는 것이 좋습니다 :

    애프터 INSERT 트리거 방식으로 인해 추가 UPDATE 문에 오버 헤드를 포함한다. 다음과 같이 나는 INSTEAD INSERT의 트리거를 사용하는 것이 좋습니다 :

    CREATE TRIGGER tablename_on_insert ON tablename 
    INSTEAD OF INSERT 
    AS
    INSERT INTO tablename (oldcolumn, newcolumn)
    SELECT oldcolumn, ISNULL(newcolumn, oldcolumn)
    FROM inserted
    

    이것은 oldcolumn가 자동 ID 열 경우 비록 작동하지 않습니다.

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

    4.카필의 답변을 확장하고, 원하지 않는 기본 제약 조건을 방지하기 위해,이 시도 :

    카필의 답변을 확장하고, 원하지 않는 기본 제약 조건을 방지하기 위해,이 시도 :

    ALTER TABLE tablename ADD newcolumn type NOT NULL CONSTRAINT DF_TMP_TABLENAME_NEWCOLUMN DEFAULT -9999
    Go
    Update tablename SET newcolumn = oldcolumn
    Go
    ALTER TABLE tablename DROP CONSTRAINT DF_TMP_TABLENAME_NEWCOLUMN
    Go
    

    당신의 유형은 VARCHAR, NVARCHAR, 날짜, ... 또는 다른 유형의 호환 데이터에 의한 경우 'NODATA'에 의해 -9999 교체 : 특정 값은 중요하지 않습니다, 그것은 2 차 명령에 의해 삭제됩니다.

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

    5.기존 열 값을 기준으로 테이블에 새 열을 삽입 할 계산 열을 사용할 수 있습니다

    기존 열 값을 기준으로 테이블에 새 열을 삽입 할 계산 열을 사용할 수 있습니다

    ALTER TABLE dbo.TableName ADD NewColumn AS (OldColumn) PERSISTED;
    

    또는, 당신은 기존의 열 값을 기준 값으로 일부 내용을 변경하려는 경우, 사용

    ALTER TABLE dbo.TableName ADD NewColumn AS (OldColumn * 1.5) PERSISTED;
    
  6. ==============================

    6.내 경우, 나는 CODE라는 새 NOT NULL 고유의 열을 추가하고 싶지만 내가 작성시 가치에 대해 모른다. 내가 NEWID에서 기본 값을 얻을하여에 대한 기본 값을 설정 () 나중에 업데이트합니다.

    내 경우, 나는 CODE라는 새 NOT NULL 고유의 열을 추가하고 싶지만 내가 작성시 가치에 대해 모른다. 내가 NEWID에서 기본 값을 얻을하여에 대한 기본 값을 설정 () 나중에 업데이트합니다.

    ALTER TABLE [WIDGET] ADD [CODE] CHAR(5) NOT NULL DEFAULT(SUBSTRING(CONVERT(CHAR(36), NEWID()), 1, 5))
    
    ALTER TABLE [dbo].[WIDGET] WITH CHECK ADD CONSTRAINT [UQ_WIDGET_CODE] UNIQUE ([CODE])
    
  7. ==============================

    7.나는 당신이 설정 IDENTITY_INSERT OFF하고 방금 설정 IDENTITY_INSERT ON을 사용 썼다 삽입 문 다음에 사용하는 경우가 작동합니다 생각합니다.

    나는 당신이 설정 IDENTITY_INSERT OFF하고 방금 설정 IDENTITY_INSERT ON을 사용 썼다 삽입 문 다음에 사용하는 경우가 작동합니다 생각합니다.

  8. from https://stackoverflow.com/questions/13249936/add-a-column-to-a-table-with-a-default-value-equal-to-the-value-of-an-existing-c by cc-by-sa and MIT license