Вставить несколько строк значений по умолчанию в таблицу
У меня есть таблица с одним столбцом, который является автогенерированным идентификатором
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
.
Ответы
Ответ 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()
для получения идентификатора вставленной строки? Вы вопрос немного расплывчатый, можете ли вы уточнить?