我如何制作带有主键和自动递增字段的SQL临时表?

问题描述 投票:26回答:3

我在这里想念什么?我正在尝试使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

我说了一个错误:

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

sql-server sql-server-2005 temp-tables
3个回答
47
投票

就我所知,达到您指定的目标,您只是缺少“主键”一词。

对于其他列,最好是明确定义它们是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

10
投票

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

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

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


5
投票

[如果您只是在做一些快速而肮脏的临时工作,则也可以跳过键入显式的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
© www.soinside.com 2019 - 2024. All rights reserved.