SQL에서 정수 열 값을 1 씩 증가시키는 방법


93

내 질문은

열의 값을 1 씩 증가시키는 방법

예를 들어 열에 ID1,2,3,4, .. 값이 있다고 가정합니다 .

이제이 테이블을 업데이트하면 ID열이 1 씩 증가해야합니다.

이제 ID2,3,4,5, ..


원하는 샘플? 1 행에 대해 열 값을 1 씩 증가 시킵니까? 모든 행? 귀하의 테이블 (DDL)은 무엇입니까? 데이터 샘플 (DML)?
Kiquenet

답변:


157

테이블의 모든 값에 하나를 추가하려면 ...

UPDATE myTable
SET ID = ID + 1

새 값을 만들려면 이전에 가장 높은 값 (일반적으로)보다 하나 더 많은 값을 만들려면 IDENTITY가 있는 열을 사용하세요.


39
열이 NULL 인 경우에는 작동 하지 않습니다 . NULL 열은 증가한 후에도 NULL로 유지됩니다. 이 해결하려면, 사용 ISNULL성명 :이 같은 UPDATE myTable SET ID = ISNULL(ID, 0) + 1(에서 촬영 이 SO 응답 )
우베 KEIM

SET [Lic] = [Lic] + @dif. 참고 @dif 변수가 될 수 있습니다 , 0, 또는 음의 양
Kiquenet

43

자동으로 생성 된 각 행에 대해 고유 한 번호를 가지려면 Neil의 대답에 따라 IDENTITY입니다.

테이블을 업데이트 할 때마다 값을 늘리려는 경우 (즉, 키가 아님) :

Update MyTable
Set IDColumn = IDColumn + 1
Where <whatever>


1

이 작업을 사용할 수 있습니다 IDENTITY.

CREATE TABLE [dbo].[MyTable](
    [MyTableID] [int] IDENTITY(1,1) NOT NULL,
    -- Other columns
)

첫 번째 레코드를 삽입하면 Id1이됩니다.


1

Oracle에서는 코드가 조금 더 까다 롭습니다.

시퀀스 개체를 사용하여 자동 증가 필드를 만들어야합니다 (이 개체는 숫자 시퀀스를 생성 함).

다음 CREATE SEQUENCE 구문을 사용합니다.

CREATE SEQUENCE seq_person
MINVALUE 1
START WITH 1
INCREMENT BY 1
CACHE 10

위의 코드는 1로 시작하여 1 씩 증가하는 seq_person이라는 시퀀스 개체를 만듭니다. 또한 성능을 위해 최대 10 개의 값을 캐시합니다. 캐시 옵션은 더 빠른 액세스를 위해 메모리에 저장 될 시퀀스 값 수를 지정합니다.

"Persons"테이블에 새 레코드를 삽입하려면 nextval 함수를 사용해야합니다 (이 함수는 seq_person 시퀀스에서 다음 값을 검색합니다).

INSERT INTO Persons (ID,FirstName,LastName)
VALUES (seq_person.nextval,'Lars','Monsen')

위의 SQL 문은 "Persons"테이블에 새 레코드를 삽입합니다. "ID"열에는 seq_person 시퀀스의 다음 번호가 할당됩니다. "FirstName"열은 "Lars"로 설정되고 "LastName"열은 "Monsen"으로 설정됩니다.


1

다음을 시도해 볼 수 있습니다.

DECLARE @i INT
SET @i = @@ROWCOUNT + 1

INSERT INTO YourTable
        (Identity Column)    
VALUES    
        (@i + 1)
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.