2011-11-12 3 views
2

SP에 임시 테이블이 있습니다.테이블 ID 생성시 변수가

CREATE TABLE #bclist (
      bcastid INT 
      ,userid INT 
      ,etype INT 
      ,articles0 BIGINT 
      ,seq INT identity(1, 1) 
      ) 

나는 또한이 변수 @nextseq 내가 원하는 것은

CREATE TABLE #bclist (
      bcastid INT 
      ,userid INT 
      ,etype INT 
      ,articles0 BIGINT 
      ,seq INT identity(@nextseq, 1) 
      ) 

아래 그러나 SQL Server가이 .ANY 솔루션을 허용하지 않습니다 같은 somthingh?

+0

아마도 당신이 해결하려고하는 '실제'문제를 게시해야 결과; row_number() 솔루션과 같은 냄새가납니다. –

답변

2

당신은

DBCC CHECKIDENT (#bclist, RESEED, @nextseq) 

을 사용할 수 있습니다하지만 당신의 SP가 dbowner에서 실행되고 있지 않은 경우 작동하지 않습니다. 또 다른 한가지는 테이블을 다시 채우는 것입니다.

if @nextseq > 1 
     begin 
       TRUNCATE table #bclist 
      SET IDENTITY_INSERT #bclist ON 
      INSERT INTO #bclist (seq) 
      VALUES (@nextseq-1) 
      SET IDENTITY_INSERT #bclist OFF 
      DELETE FROM #bclist 
     End 

는 서열 당신이 대신 1.

0

에서 값을 얻을 것이다 coulmn에 그렇지 않은 경우 조건을 잊지 마세요 어떻게 글로벌 임시 테이블은 어떻습니까?

DECLARE @foo varchar(5); 
SET @foo = '4'; 

DECLARE @query nvarchar(max); 

-- a global temp table will exist for the lifetime of 
-- the connection 
SET @query = replace(N' 
CREATE TABLE ##bclist (
      bcastid INT 
      ,userid INT 
      ,etype INT 
      ,articles0 BIGINT 
      ,seq INT identity(@seed, 1) 
      )', '@seed', @foo) 

EXECUTE(@query) 

INSERT INTO 
    ##bclist 
SELECT 0,1,2,3 
select * from ##bclist 

drop table ##bclist 

bcastid userid etype articles0 seq 
0   1  2  3   4 
관련 문제