Не уверен, что вы сможете сделать это без использования динамического sql для построения оператора обновления в переменной.
Этот оператор вернет список столбцов на основе введенного вами имени таблицы:
select name from syscolumns
where [id] = (select [id] from sysobjects where name = 'tablename')
Не уверен, смогу ли я избежать здесь цикла... вам нужно будет загрузить результаты сверху в курсор, а затем построить из него запрос. Псевдо закодировано:
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 будет построен.
редактировать: не уверен, что вы сможете сделать все 1000 строк в обновлении одновременно... есть логические ограничения (varchar (8000)?) на размер, который @query также может расти. Возможно, вам придется разделить код, чтобы он обрабатывал 50 столбцов за раз. Поместите столбцы из оператора select syscolumns во временную таблицу с идентификатором и создайте свой динамический sql, чтобы он обновлял 20 столбцов (или 50?) за раз.
Другой альтернативой может быть использование Excel для массового создания этого. Выберите столбец и скопируйте результаты в столбец a электронной таблицы. Поместите '= в столбец b, tmp.[12331312] в столбце c скопируйте столбец a в столбец D и запятую в столбец e. Скопируйте всю электронную таблицу в блокнот, и у вас должны быть построены столбцы оператора обновления. Неплохое решение, если это одноразовое событие, не уверен, что я буду полагаться на это как на постоянное решение.
person
Twelfth
schedule
08.10.2010
TRIGGER
или изменить схему, чтобы вам не приходилось этого делать. - person Travis Gockel   schedule 08.10.2010