Как сделать временную таблицу SQL с первичным ключом и автоинкрементным полем? - PullRequest
19 голосов
/ 08 декабря 2010

что мне здесь не хватает?я пытаюсь сделать поле идентификатора первичным ключом с автоматическим приращением, чтобы мне не нужно было вставлять его явно.

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 ]

42 голосов
/ 08 декабря 2010

Вы просто пропускаете слова "первичный ключ", насколько я вижу, для достижения указанной вами цели.

Для других ваших столбцов лучше явно указать, должны ли они быть 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
9 голосов
/ 06 января 2012

вы не вставляете в поля идентичности. Вам необходимо указать имена полей и использовать предложение Values ​​

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

Если вы используете insert into... select field field field он вставит первое поле в это поле идентификации и будет бомбить

2 голосов
/ 01 ноября 2017

Если вы просто выполняете некоторую быструю и грязную временную работу, вы также можете пропустить ввод явного оператора 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...