如何使用主键和自动增量字段创建一个sql临时表?

时间:2010-12-07 23:36:56

标签: sql-server-2005

我在这里失踪了什么? 我试图让id字段成为主键和自动增量,这样我就不需要明确地插入它。

CREATE TABLE #tmp
(
ID INT IDENTITY(1, 1) ,
AssignedTo NVARCHAR(100),
AltBusinessSeverity NVARCHAR(100),
DefectCount int
);

insert into #tmp 
select 'user','high',5 union all
select 'user','med',4


select * from #tmp

我对此说法有误:

  

插入错误:列名或数字   提供的值与表不匹配   定义

3 个答案:

答案 0 :(得分:42)

就我所见,您只是错过了“主键”这个词,以达到您指定的目标。

对于其他列,最好明确定义它们是NULL还是NOT NULL,因此您不依赖于ANSI_NULL_DFLT_ON设置。

CREATE TABLE #tmp
(
ID INT IDENTITY(1, 1) primary key ,
AssignedTo NVARCHAR(100),
AltBusinessSeverity NVARCHAR(100),
DefectCount int
);

insert into #tmp 
select 'user','high',5 union all
select 'user','med',4


select * from #tmp

答案 1 :(得分:9)

你不要插入身份字段。您需要指定字段名称并使用Values子句

insert into #tmp (AssignedTo, field2, field3) values (value, value, value)

如果您使用insert into... select field field field 它会将第一个字段插入该标识字段并弹出

答案 2 :(得分:2)

如果你只是做一些快速而又脏的临时工作,你也可以跳过键入一个显式的CREATE TABLE语句,然后用SELECT ... INTO创建临时表,并在选择列表中包含一个Identity字段。

select IDENTITY(int, 1, 1) as ROW_ID,
       Name
into #tmp
from (select 'Bob' as Name union all
      select 'Susan' as Name union all
      select 'Alice' as Name) some_data

select *
from #tmp