2013-03-14 1 views
2

SQL Server 테이블이 있으며 사용자 지정 순서에 사용할 테이블에 새 열을 추가하려고합니다. 생성 후 값을 변경할 수 있어야하므로 ID 열이 아닙니다.SQL 증가 값이있는 새 편집 가능 (ID 없음) 열 추가

내 표는 [{Name: Rarity},{Name: Applejack}] 등의 데이터와

CREATE TABLE [dbo].[Ponies] (
    [Name] [nvarchar](50) NOT NULL 
) 

입니다.

나는 나의 표는

CREATE TABLE [dbo].[Ponies] (
    [Name] [nvarchar](50) NOT NULL, 
    [IndexNumber] [int] NOT NULL 
) 

처럼 될 것입니다 원하는 그리고 데이터가 ALTER 문 이후 [{Name: Rarity, IndexNumber:1},{Name: Applejack, IndexNumber:2}]처럼되고 싶어요. 요점은 행의 순서가 생성 후에 변경 될 수 있다는 것입니다. 즉, 새 행이 추가되면 이전 행의 순서가 변경 될 수 있습니다.

ALTER 문을 수행하여 각각의 기존 데이터 항목에 증분 IndexNumber이 추가되도록하려면 어떻게해야합니까?

답변

2

는 :

Fiddle demo here

alter table dbo.Ponies 
add [IndexNumber] int not null default 0 
Go 

declare @index int = 0 
update dbo.Ponies set @index = [IndexNumber] = @index + 1 

select * from dbo.Ponies 
+0

우수! 나는 그런 변수를 전혀 사용하지 않을 것이라고 생각했습니다! 고맙습니다. – Nenotlep

+0

작은 문제입니다!,)' – Kaf

+0

이 테이블이 충분히 커서 서버가 'UPDATE'에 대해 병렬 처리를 사용하기로 결정하면이 테이블은 별개의 값을 할당하지 않을 수 있습니다. CTE + ROW_NUMBER() 기반 업데이트가 더 강력합니다. –

3

이 시도 :

ALTER TABLE dbo.Ponies 
ADD IndexNumber INT IDENTITY(1,1) NOT NULL 

이 테이블에 "정체성"열 추가 - 1에서 시작하는 각 행에 대해 1 씩 증가 번호가 매겨됩니다. 삽입되는 모든 새 행에 대해 자동으로 설정됩니다. 당신이 editable column (아닌 ID 열) 다음과 같이 시도하려는 경우

+0

미안, 내 질문이 너무 막연했다. 내 요점은 내가 편집 할 수 있기를 원한다는 것, 그리고 정체성이 돌에 놓여 있다는 것을 아는 한 그렇지 않습니까? – Nenotlep

+0

@Nenotlep : 그렇습니다, 당신은이 점에서 확실히 명확하지 않고 모호합니다 .... –

+0

@Nenotlep 또한 : kaf의 솔루션은 이미 테이블에있는 행에 대해 작동합니다. 삽입되는 새로운 행에 대한 지원 ... –