반응형
기존 열의 값과 동일한 기본값을 사용하여 테이블에 열 추가
기존 열의 값과 동일한 기본값을 사용하여 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
.
반응형
'programing tip' 카테고리의 다른 글
C #에서 yield return iterator를 사용하는 목적 / 장점은 무엇입니까? (0) | 2020.10.16 |
---|---|
PHP의 연관 배열에 항목 푸시 (0) | 2020.10.16 |
clone () 대 복사 생성자 대 팩토리 메서드? (0) | 2020.10.15 |
클래스 기반 컴포넌트에서 React.forwardRef를 사용하는 방법은 무엇입니까? (0) | 2020.10.15 |
C #에서 F # 코드 호출 (0) | 2020.10.15 |