Як вставити в таблицю лише з одним стовпчиком IDENTITY?


84

(Придумав це питання під час спроби відповісти на це інше )

Розглянемо таку таблицю MS-SQL, яка називається GroupTable:

Ідентифікатор групи
-------
1  
2  
3  

де GroupID - це первинний ключ і стовпець Identity.

Як вставити новий рядок у таблицю (і, отже, створити новий ідентифікатор), не використовуючи IDENTITY_INSERT ON?

Зверніть увагу, що це:

INSERT INTO GroupTable() Values ()   

... не буде працювати.

редагувати: ми говоримо про SQL 2005 або SQL 2008 тут.

Відповіді:


126

Це має спрацювати:

INSERT INTO GroupTable DEFAULT VALUES 

Я не можу змусити це працювати з Visual Studio 2008 / SQL Express 2005. Будь-які ідеї? Такий же макет таблиці, один стовпець, первинний ключ, ідентичність (1,1).
Томас Сандберг,

Я використовую SQL 2008 R2, мені теж не приємно!
TDaver

Працює у мене на SQL Server 2008 Express.
Адріан Лінч,

3
@RomanPekar, у SqlServer 2008 та пізніших версіях можливо з merge оператором. Наприкладmerge into TableName using (values (1), (2), (3)) s(n) on 1=0 when not matched then insert default values;
i-one


3

Одночасно можна вставити більше одного рядка.

Наприклад, щоб вставити 30 рядків. ВСТАВИТИ В ГРУПУТаблицяЗНАЧЕННЯ ЗА ЗАЗНАЧАННЯМ ПЕРЕЙТИ

Буде вставлено 30 рядків, щоразу збільшуючи стовпець ідентичності.


Не впевнений щодо SQL 2008, але в 2008R2 це не працює (я отримую загальну помилку "Неправильний синтаксис біля 'GO'")
Elaskanator,

0

Чи можете ви спробувати використовувати послідовність або щось подібне? Де ви вибираєте з послідовності, і це дасть вам наступне значення в послідовності.


Я думаю, що він говорить про Oracle DB
кодовий

Я знаю, що послідовності існують в Oracle, і не був впевнений, що (якщо такі існували) подібні речі існували в SQL Server. Ось чому я суфіксував його як "або щось подібне", а потім дав визначення Послідовності для довідки.
Майк Поне

3
SQL Server 2012 має ПОСЛІДОВНОСТІ s.
Нік Чаммас,
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.