답변:
열을 이미 생성했다고 생각하지만이 답변에서는 열이 아직 존재하지 않는다고 가정합니다. IMO, 고유 필요한 열이해야 결코기존 행을 먼저 채우는 방법을 계획하지 않고 추가 . 따라서이 작업을 수행하는 방법은 0부터 시작하겠습니다.
이를 수행하는 방법은 값을 채우는 것과 관련된 내용에 따라 다릅니다.
어떤 방법을 사용하든 데이터 무결성을 보장하기 위해 열에 고유 한 제약 조건을 추가하십시오. 방법 1과 2의 경우 단일 명령문 또는 사용자 트랜잭션 (미도시) 내에서 수행 할 수 있으며 방법 3의 사용자 트랜잭션 내에서 수행해야합니다.
이 작업을 수행하는 몇 가지 다른 모호한 방법이 있지만 가장 일반적인 방법을 다루었다고 생각합니다.
방법 1 : IDENTITY 열 추가
ALTER TABLE MyTable ADD MyColumn int IDENTITY(1, 2) NOT NULL
그러면 테이블의 모든 행이 시드 값 (1)으로 시작하여 모든 행의 증분 값 (2)만큼 증가하는 정수 값으로 채워집니다. 값을 채우는 순서가 정의되어 있지 않다고 생각합니다 (주문을 지정 해야하는 경우 방법 3을 사용하십시오).
방법 2 : 기본 제약 조건을 사용하여 채우기
ALTER TABLE MyTable ADD MyColumn uniqueidentifier NOT NULL
CONSTRAINT DF_MyTable_MyColumn
DEFAULT (NEWSEQUENTIALID())
이렇게하면 세 가지 작업이 원자 적으로 수행됩니다. 1. 허용되지 않는 열 추가 NULL 값을 합니다. 2. 열에 대한 기본 제한 조건을 작성하십시오. 3. 기본 제한 조건을 사용하여 테이블의 각 행을 채우십시오.
이 예제는 uniqueidentifier 열을 모든 데이터 유형 및 기본 제약 조건과 마찬가지로 작동합니다.
방법 3 : UPDATE 문을 사용하여 채우기
예를 들어, 애플리케이션의 다른 부분에서 테이블에 추가해야하는 값이 있거나 고유 한 값의 정확한 순서를 지정해야하는 경우에 이러한 상황이 발생합니다.
BEGIN TRANSACTION
ALTER TABLE MyTable ADD MyColumn int NULL
UPDATE MyTable
SET MyColumn = ...
ALTER TABLE MyTable ALTER COLUMN MyColumn int NOT NULL
COMMIT TRANSACTION
방법 4 : SEQUENCE 개체를 사용하여 채우기
SQL Server 2012의 경우 SEQUENCE개체에 의해 생성 된 값을 사용하여 열을 채울 수 있습니다. 아직이 작업을 수행하지 않았으므로 MSDN 문서 를 참조하십시오 .
update mytable set mycolumn = next value for mysequence where mycolumn is null;
다음은 1부터 시작하는 시퀀스 번호로 'cn'열을 업데이트합니다.
DECLARE @id INT
SET @id = 0
UPDATE X
SET @id = cn = @id + 1
GO
그리고이 모든 것이 여전히 작동하지 않으면 (아마도 오래된 SQL-92이기 때문에) Ziggy Crueltyfree Zeitgeister가 제안한대로 여기 를 여러 단계로 나눌 수 있습니다 .
CREATE TABLE sorting (sid numeric(10,10), rn int);
INSERT INTO sorting (sid, rn)
SELECT SortID, RecordNumber FROM Beleg
WHERE Year ( Valuta ) = 2016
AND Ursprungskonto = 1210
ORDER BY SortID;
UPDATE Beleg SET SortID = (SELECT rn FROM sorting WHERE sid=Beleg.SortID)
WHERE Year ( Valuta ) = 2016
AND Ursprungskonto = 1210;
DROP TABLE sorting;
RecordNumber? 독점적 인 Filemaker 기능 / 기능처럼 보입니다. SQL Server에는 적용되지 않으며 SQL 92 표준에는 적용되지 않습니다.
Filemaker없으므로 대답이 관련이 없다고 생각합니다. 임시 테이블을 사용하고 해당 열을 ROW_NUMBER()함수로 채울 수 있습니다 .