Подтвердить что ты не робот

Вставить несколько строк значений по умолчанию в таблицу

У меня есть таблица с одним столбцом, который является автогенерированным идентификатором

create table SingleIdTable (
   id int identity(1,1) not null
)

Я могу вставить одну строку с автогенерированным идентификатором:

insert into SingleIdTable default values

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

insert into SingleIdTable
output inserted.Id into @TableOfIds
    select (default values) from SomeOtherTable where Attribute is null

Если намерение состоит в том, чтобы вставить строку в SingleIdTable для каждой строки в SomeOtherTable, где Attribute имеет значение null, используя автоматически сгенерированный идентификатор. Вышеуказанное не работает, но как я могу это сделать. Я отмечаю, что если бы у моей таблицы было больше, чем только один столбец, я мог бы это сделать, но я не могу выбрать пустые строки, что я действительно хочу сделать.

Я не могу изменить определение SomeOtherTable.

4b9b3361

Ответ 1

Если для SQL Server 2008+ вы можете использовать MERGE для этого. Пример синтаксиса ниже.

MERGE INTO SingleIdTable
USING (SELECT *
       FROM   SomeOtherTable
       WHERE  Attribute IS NULL) T
ON 1 = 0
WHEN NOT MATCHED THEN
  INSERT
  DEFAULT VALUES
OUTPUT INSERTED.id; 

Я не уверен, какое практическое использование имеет эта таблица с одним столбцом?

Ответ 2

вы не указали, в какой версии SQL Server вы находитесь. Если вы оказались на SQL 2012, вы, вероятно, замените SingleIdTable на последовательность: http://msdn.microsoft.com/en-us/library/ff878091.aspx

Ответ 3

Не можете ли вы использовать SCOPE_IDENTITY() для получения идентификатора вставленной строки? Вы вопрос немного расплывчатый, можете ли вы уточнить?