Вставка SQL Server без указанных столбцов - PullRequest
0 голосов
/ 08 мая 2018

У меня есть таблица с автоматически созданным столбцом идентификаторов (и это все!)

CREATE TABLE [dbo].[EmailGroup](
    [EmailGroupGuid] [uniqueidentifier] NOT NULL 
    CONSTRAINT [PK_EmailGroup] PRIMARY KEY CLUSTERED ([EmailGroupGuid] ASC)
) ON [PRIMARY]


ALTER TABLE [dbo].[EmailGroup] 
    ADD  CONSTRAINT [DF_EmailGroup_EmailGroupGuid]  DEFAULT (newsequentialid()) FOR [EmailGroupGuid]

Я хочу вставить эту таблицу и извлечь сгенерированный идентификатор. но я не могу работать, если это возможно. Кажется, жалуются на отсутствие значений / столбцов.

DECLARE @Id TABLE (Id UNIQUEIDENTIFIER)

INSERT INTO EmailGroup
OUTPUT inserted.EmailGroupID INTO @Id

Есть ли способ сделать это? Я имею в виду, что я мог бы добавить фиктивный столбец в таблицу и легко сделать это:

INSERT INTO EmailGroup (Dummy)
OUTPUT inserted.EmailGroupID INTO @Id
VALUES (1)

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

Ответы [ 2 ]

0 голосов
/ 08 мая 2018

Пожалуйста, используйте это.

CREATE TABLE [dbo].[EmailGroup]
(
    [EmailGroupGuid] [uniqueidentifier] NOT NULL CONSTRAINT [PK_EmailGroup] PRIMARY KEY CLUSTERED ([EmailGroupGuid] ASC)
) ON [PRIMARY]


ALTER TABLE [dbo].[EmailGroup] 
    ADD  CONSTRAINT [DF_EmailGroup_EmailGroupGuid]  DEFAULT (newsequentialid()) FOR [EmailGroupGuid]

DECLARE @Id TABLE (Id UNIQUEIDENTIFIER)

INSERT INTO EmailGroup 
OUTPUT inserted.EmailGroupGuid INTO @Id DEFAULT VALUES

SELECT * FROM @Id

последние 3 ВЫХОДА с моего ноутбука

--92832040-7D52-E811-B049-68F728AE8695
--2B6ADC5F-7D52-E811-B049-68F728AE8695
--0140AF66-7D52-E811-B049-68F728AE8695
0 голосов
/ 08 мая 2018

Хотя я не уверен, зачем вам такая таблица, ответом на ваш вопрос является использование ключевого слова DEFAULT:

INSERT INTO EmailGroup (EmailGroupGuid)
OUTPUT inserted.EmailGroupGuid INTO @Id
VALUES(DEFAULT);

Другой вариант - использовать DEFAULT VALUES, как показано в ответе Павана Кумара.

Ключевое различие между этими двумя опциями заключается в том, что указание списка столбцов и использование ключевого слова default дает вам больше контроля.
Кажется, что в таблице мало столбцов, но если вы добавите столбцы в таблицу и захотите вставить в них определенные значения, использование default values больше не будет допустимым параметром.

Из документов Microsoft на INSERT (Transact-SQL) :

DEFAULT

Заставляет компонент Database Engine загружать значение по умолчанию, определенное для столбца.
Если для столбца по умолчанию не существует и столбец допускает нулевые значения, вставляется NULL.
Для столбца, определенного с типом данных timestamp , вставляется следующее значение timestamp.
ПО УМОЛЧАНИЮ недопустимо для столбца идентификации.

ЗНАЧЕНИЯ ПО УМОЛЧАНИЮ

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

Итак, как вы можете видеть, default основан на столбцах, а default values основан на строках.

...