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