Не уверен, что вы сможете сделать это без использования динамического sql для построения оператора обновления в переменной.
Этот оператор будет возвращать список столбцов, основанный на имени таблицы, в которую вы положили:
select name from syscolumns
where [id] = (select [id] from sysobjects where name = 'tablename')
Не уверен, смогу ли я избежать цикла здесь .... вам нужно загрузить результаты сверху в курсор, а затем построить запрос из него.Код Psuedo:
set @query = 'update [1607348182] set '
load cursor --(we will use @name to hold the column name)
while stillrecordsincursor
set @query = @query + @name + ' = tmp_[1607348182]. ' +@name + ','
load next value from cursor
loop!
Когда запрос завершен, будучи встроенным в цикл, используйте exec sp_executesql @ query.
Просто небольшое предупреждение ... создание динамического sql в цикле, подобном этомуможет стать немного запутанным.Для устранения неполадок, поместите select @query в цикл и посмотрите, как создается @query.
edit: Не уверен, что вы сможете сделать все 1000 строк в обновлении одновременно ... тамлогические ограничения (varchar (8000)?) на размер, который может расти @query.Возможно, вам придется разделить код, чтобы он обрабатывал 50 столбцов одновременно.Поместите столбцы из оператора выбора syscolumns во временную таблицу с идентификатором и создайте динамический sql, чтобы он обновлял 20 столбцов (или 50?) За раз.
Другой альтернативой может быть использование Excel для массовой сборкиэтот.Выберите столбец и скопируйте результаты в столбец таблицы.Поместите '= в столбце b, tmp. [12331312]в столбце c скопируйте столбец a в столбец D и запятую в столбец e.Скопируйте всю электронную таблицу в блокнот, и у вас должны быть созданы столбцы оператора обновления.Неплохое решение, если это событие с одним выстрелом, не уверенный, если бы я полагался на это как на постоянное решение.