创建表标识中的变量

时间:2011-11-12 04:46:03

标签: sql-server

我在SP中有一个临时表。

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服务器不允许这样。任何解决方案?

2 个答案:

答案 0 :(得分: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

不要忘记if条件,否则你将获得2而不是1的值。

答案 1 :(得分:0)

全局临时表怎么样?

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