2012-09-24 38 views
0

我有一個存儲過程,其中包含屬性之一的表變量爲Id int NOT NULL IDENTITY(1,1)。在每次執行中,其值都會附加上一個。如何清除在存儲過程中分配給表變量的自動遞增值

我想清楚在每次執行的Id的價值,並在每個執行應該從1開始

這是我創造

create procedure OnetPlus_processing 
as 
begin 
declare @input_data table (
    Id int NOT NULL IDENTITY(1,1), 
    jobid int, 
    title varchar(400), 
    jobtitle varchar(400), 
    titlerev varchar(400), 
    jobtitlerev varchar(400) 
) 

insert into @input_data 
select jobid ,title,jobtitle,titlerev,jobtitlerev 
from job.dbo 
left outer join ..................... 
+0

究竟你*虛表的意思*?它是一個**臨時表**('#mytable'或'## mytable'),或一個**表變量**('@ mytable')?? –

+0

它的一個表變量@mytable – Linnet

回答

0

試試這個代碼,

DBCC CHECKIDENT (mytable, RESEED, 1) 

應當注意的是,爲了使用DBCC CHECKIDENT你需要dbo (db_owner)

+0

它說「必須聲明標量變量」@mytable「」。我該怎麼做? – Linnet

+0

你可以發佈你創建的整個代碼嗎?\ –

1

您無法重置表變量的IDENTITY列。表變量在DBCC CHECKIDENTTRUNCATE TABLE中均不存在,您不能刪除該表並重新創建它。

而不是使用IDENTITY列,您可以修改插入到其中的查詢以使用ROW_NUMBER()表達式。

E.g.如果您目前有:

INSERT INTO @T (Col1,Col2) 
SELECT ColA,ColB from <source query> ORDER BY ColA 

@T小號ID和使用的定義中刪除了IDENTITY

INSERT INTO @T (ID,Col1,Col2) 
SELECT ROW_NUMBER() OVER (ORDER BY ColA),ColA,ColB from <source query> 
相關問題