2011-11-12 2 views
2

J'ai une table temporaire avec un SP.Variable dans l'identité de la table de création

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

J'ai aussi une @nextseq variables Ce que je veux est somthingh comme ci-dessous

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

Mais sql server ne permet pas cette solution .Tout?

+0

peut-être vous devriez poster le problème 'réel' que vous essayez de résoudre; sent comme une solution row_number() ... –

Répondre

2

Vous pouvez utiliser

DBCC CHECKIDENT (#bclist, RESEED, @nextseq) 

Mais cela ne fonctionnera pas si votre SP ne fonctionne pas de dbowner. Une autre chose que vous pouvez faire est de réanimer la table.

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 

Ne pas oublier la condition if contraire vous seq coulmn vous obtiendrez des valeurs de 2 au lieu de 1.

0

Que diriez-vous d'une table temporaire globale?

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 

Résultats

bcastid userid etype articles0 seq 
0   1  2  3   4 
Questions connexes