SQL IDENENTIY列不以1

时间:2017-08-29 19:04:54

标签: sql sql-server identity

我在SQL 2014中有一个临时表。在这个表变量中,我声明了一个标识列。

DECLARE  @TempTable TABLE
(
    ID int IDENTITY(1,1) PRIMARY KEY
    , IncidentResolvedOn date
    , IncidentCreatedOn date
    , IncidentClosedOn date
    , TaskAssigned date
    , TaskCompleted date
    , TaskID float
    , IncidentTeamID int
    , TotalDaysOutstanding int
    , TierInfo varchar(15)
    , Task_NoTask varchar(15)
    , Tier_2_Days_Outstanding int
    , Tier_1_Days_Outstanding int
    , DaysToResolve int
    , BadDays int
    , StartDate date
    , EndDate date
) 

当我运行查询的其余部分时,ID列有时不以1开头,而是以一些随机数开头。下面的代码是我用来插入这个表变量的代码。

INSERT INTO @TempTable(IncidentResolvedOn, IncidentCreatedOn, IncidentClosedOn,TaskAssigned, TaskCompleted, TaskID, IncidentTeamID )
SELECT  [Incident Resolved On]
        , [Incident Created On]
        , [Incident Closed On]
        , [Task Assigned On]
        , [Task Completed On]
        , [Task ID]
        , IncidentTeamID

FROM HEATData

这在表变量和临时表中都会发生。我以前从未见过这种情况。通常当我使用IDENTITY(1,1)短语时,无论我创建该表多少次,它总是以1开头。有什么建议吗?

1 个答案:

答案 0 :(得分:0)

我想你的连接是开放的,因此,你的身份不会重置你的本地变量。这是一个例子。

DECLARE  @TempTable TABLE
(
    ID int IDENTITY(1,1) PRIMARY KEY,
    ID2 int)
insert into @TempTable
values
(1),(2)

select * from @TempTable

delete from @TempTable

insert into @TempTable
values
(1),(2)

select * from @TempTable

现在,如果您使用GO将其包装在自己的批处理中,您可能会发现这不会发生。实际上,您必须重新声明表变量。

DECLARE  @TempTable TABLE
(
    ID int IDENTITY(1,1) PRIMARY KEY,
    ID2 int)
insert into @TempTable
values
(1),(2)

select * from @TempTable

go


DECLARE  @TempTable TABLE
(
    ID int IDENTITY(1,1) PRIMARY KEY,
    ID2 int)
insert into @TempTable
values
(1),(2)

select * from @TempTable

对于#TempTable,如果您没有明确删除#TempTable或连接仍未打开,则相同。当然,对于实际表格,增量将与第一个例子类似地继续。