Sql server 如何使用主键和自动递增字段创建SQL临时表?

Sql server 如何使用主键和自动递增字段创建SQL临时表?,sql-server,sql-server-2005,temp-tables,Sql Server,Sql Server 2005,Temp Tables,我错过了什么? 我试图将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 * fro

我错过了什么? 我试图将
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
我有一个错误是这样说的:

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


就我所知,你只是缺少了“主键”这个词,无法实现你的特定目标

对于其他列,最好明确定义它们是
NULL
还是
notnull
,尽管这样您就不需要依赖
ANSI\u NULL\u DFLT\u 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

您不能在标识字段中插入。您需要指定字段名并使用Values子句

insert into #tmp (AssignedTo, field2, field3) values (value, value, value)
如果使用“执行
插入到…”。。。选择字段

它会将第一个字段插入该标识字段,并会轰炸

如果您只是在做一些快速而肮脏的临时工作,您也可以跳过键入显式CREATE TABLE语句,只需将带有SELECT…into的临时表制作成并在SELECT列表中包含标识字段

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

标识列不需要PK。@Sam-他指定要将其作为PK。你为什么说这不必要?他可能想要唯一的约束强制,以及将其定义为PK时附带的聚集索引。我不想要DUP,所以我认为主键是完美的。我想稍后再使用它loop@kacalapy-尝试运行
DROP TABLE 35; tmp
我怀疑您可能有一个旧版本把事情搞砸了。@Sam-我不知道您的情况,但我正在回答以下问题
如何使用主键和自动插入字段创建sql临时表?
您似乎回答了一半!不要偷懒,指定要插入的列。你以后会很感激的