programing tip

기존 열의 값과 동일한 기본값을 사용하여 테이블에 열 추가

itbloger 2020. 10. 15. 07:36
반응형

기존 열의 값과 동일한 기본값을 사용하여 테이블에 열 추가


기존 열의 값과 동일한 기본값을 사용하여 SQL Server 테이블에 열을 추가하는 방법은 무엇입니까?

이 T-SQL 문을 시도했습니다.

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

하지만 오류가 발생합니다.

이 컨텍스트에서는 "oldcolumn"이라는 이름이 허용되지 않습니다. 유효한 식은 상수, 상수 식 및 (일부 컨텍스트에서) 변수입니다. 열 이름은 허용되지 않습니다.


이 시도:

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

나는 그것들을별로 좋아하지 않지만 AFTER INSERT트리거로 이것을 할 수있는 방법은 다음과 같습니다.

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   

AFTER INSERT트리거 방식으로 인해 추가 오버 헤드 포함 UPDATE문. INSTEAD OF 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 열인 경우 작동하지 않습니다 .


Kapil 의 답변 을 확장 하고 원치 않는 기본 제약 조건을 피하려면 다음을 시도하십시오.

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, datetime, ... 인 경우 -9999를 'noData'로 바꾸거나 다른 유형의 호환 가능한 데이터로 바꿉니다. 특정 값은 중요하지 않으며 두 번째 명령에 의해 지워집니다.


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

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

또는 기존 열 값을 기반으로 값을 변경하려면 다음을 사용하십시오.

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

Set Identity_Insert <TableName> OFF당신이 작성한 문장을 삽입하고 사용하면 작동 할 것이라고 생각합니다 Set Identity_Insert <TableName> ON.

참고 URL : https://stackoverflow.com/questions/13249936/add-a-column-to-a-table-with-a-default-value-equal-to-the-value-of-an-existing-c

반응형