Не уверен, что вы сможете это сделать, не используя динамический 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]. ' [email protected] + ','
load next value from cursor
loop!
Когда запрос делается строится в цикле, используйте EXEC sp_executesql @query.
Просто небольшое предупреждение ... построение динамического sql в такой петле может немного запутать. Для устранения неполадок, поместите выбранный @query в цикле и наблюдайте за построением @query.
Редактировать: Не уверен, что вы сможете делать все 1000 строк в обновлении сразу ... существуют логические пределы (varchar (8000)?) На размер, который может увеличиться и @query. Возможно, вам придется разделить код, чтобы он обрабатывал 50 столбцов за раз. Поместите столбцы из оператора выбора syscolumns в таблицу temp с идентификатором и создайте динамический sql, чтобы он обновлял 20 столбцов (или 50?) За раз.
Другой альтернативой было бы использование excel для массового построения этого. Выделите столбец и скопируйте результаты в столбец a таблицы. Put '= в столбце b, tmp. [12331312] в столбце c, скопировать столбец a в столбец D и запятую в столбец e. Скопируйте всю электронную таблицу в блокнот, и вы должны иметь столбцы инструкции обновления, созданные для вас. Неплохое решение, если это одноразовый случай, не уверен, что я буду полагаться на это как на постоянное решение.
Я бы рекомендовал использовать «TRIGGER» или изменить вашу схему, чтобы вам не пришлось это делать. –
Я не понимаю. После вашего первого обновления две таблицы будут содержать одинаковые строки, так что вы надеетесь, что второе обновление будет делать? – PaulG
Travis G, я согласен с вами в изменении схемы db, но, к сожалению, я должен следовать этой схеме в моем проекте. – amuliar