Как я могу создать таблицу sql temp с первичным ключом и полем автоинкремента?
что мне здесь не хватает?
im, пытаясь заставить поле 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
Я получаю сообщение об ошибке:
Вставить ошибку: имя столбца или номер заданные значения не соответствуют таблице определение.
Ответы
Ответ 1
Вы просто пропускаете слова "первичный ключ", насколько я вижу, чтобы соответствовать вашей заданной цели.
Для ваших других столбцов лучше всего явно определить, должны ли они быть 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
Ответ 2
вы не вставляете в поля идентификации. Вам нужно указать имена полей и использовать предложение Values
insert into #tmp (AssignedTo, field2, field3) values (value, value, value)
Если вы используете do insert into... select field field field
он вставляет первое поле в это поле идентичности и будет бомбить
Ответ 3
Если вы просто выполняете какую-то быструю и грязную временную работу, вы также можете пропустить ввод явного оператора CREATE TABLE и просто сделать таблицу temp с помощью 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