2009-08-26 3 views
4

다른 테이블의 필드의 최대 값으로 시작하는 ID 시드를 사용하여 테이블 변수를 만들어야합니까?테이블 변수에 프로그램 적으로 ID 시드 설정

DECLARE @IdentitySeed int 

SET @IdentitySeed = (SELECT MAX(HHRecId) +1 FROM xxx) 

DECLARE @HH TABLE (
    HHId INT IDENTITY(@IdentitySeed,1) 
    ,AddressType CHAR(1) 
    ,Address1 VARCHAR(100) 
    ,City VARCHAR(50) 
    ,State VARCHAR(2) 
    ,Zip VARCHAR(5) 
    ,LastName VARCHAR(50) 
    ) 

을하지만 구문 오류를 제공합니다 :

나는 이것을 시도했습니다.

지금은 테이블 변수에 다른 int 열을 추가하고 ID 열과 @IdentitySeed의 합계로 업데이트했지만 업데이트하지 않고이를 수행하는 방법을 찾고 싶습니다.

답변

7

당신은 사용하여 IDENTITY 컬럼의 현재 값을 확인할 수 있습니다

DBCC CHECKIDENT (#HH, RESEED, 42) 

을하고도에 대한 변수와 함께 작동 새로운 값 : 그것은 로컬 및 글로벌 임시 테이블 작동

DBCC CHECKIDENT (#HH, RESEED, @IdentitySeed) 

(예 : CREATE TABLE #HH (...) 또는 CREATE TABLE ##HH (....) -하지만 이

죄송합니다, 당신이 테이블 변수를 사용하여이 작업을 수행 할 수없는 것 같다

:-(테이블 변수와 함께 작동하지 않는 것 같습니다 .....

3

나는 이것을 할 수 있다고 믿지만 동적 SQL에서 수행해야 할 것입니다 - 동적 SQL에서 tableVar을 선언하고 거기에서 사용하십시오!

1에서 시작하여 MAX (HHRecId) + ID로 계산 된 보조 ID 필드가있는 것이 더 쉽고 더 빠른 코드가됩니다.

DBCC CHECKIDENT (#HH) 

당신은 또한 사용하여 나중에 변경할 수 있습니다 :

2

나는 다음을 수행 결국 :

DECLARE @NewId INT 

SELECT @NewId = MAX(ID) FROM MyIDSTable 

DECLARE @MyTempData TABLE (
    Id int not null primary key 
    ,Field1 int not null 
    ,Field2 nvarchar(25) not null 
    ,Field3 datetime 
) 

INSERT INTO @MyTempData 
SELECT ROW_NUMBER() OVER (Order by [C].[Cancel_id] ASC) + @NewId -1 [RowNum] 
     ,Field1 
     ,Field2 
     ,Field3 

INSERT INTO MyTable SELECT * FROM @MyTempData 

UPDATE MYIDSTable SET ID = (SELECT MAX(ID) FROM @MyTempData) + 1 WHERE Name = 'Something' 

당신에게

감사
관련 문제