Обновите таблицу, в которой имена столбцов неизвестны - PullRequest
0 голосов
/ 02 августа 2011

У меня есть таблица, но я не знаю ее столбцы (я знаю только, что в ней есть «столбец id (Uniqueidentifier)»).

Я могу получить все столбцы в таблице с помощью следующего запроса:

    DECLARE @columnNames NVARCHAR(4000) = ''

    SELECT @columnNames += '[' + COLUMN_NAME + '] '
    FROM INFORMATION_SCHEMA.Columns
    WHERE TABLE_NAME = 'MY_TABLE' AND COLUMN_NAME NOT IN ('id')
    ORDER BY COLUMN_NAME

Теперь я хочу обновить одну запись данными другой записи ...

Как мне это сделать?

Спасибо всем ...

Ответы [ 2 ]

1 голос
/ 02 августа 2011

Вот как вы можете построить динамический sql

DECLARE @columnNames NVARCHAR(4000) 
DECLARE @idfrom int, @idto int
DECLARE @table nvarchar(50)
SET @table = 'MY_TABLE'
SET @idfrom = 5 -- id you are copying from
SET @idto = 2   -- id you are copying to

DECLARE @sqlstring nvarchar(max)

SELECT @columnNames = coalesce(@columnNames, 'SET ') + '[' + COLUMN_NAME + ']=t2.' + '[' + COLUMN_NAME + '],'
FROM INFORMATION_SCHEMA.Columns 
WHERE TABLE_NAME = @table AND COLUMN_NAME NOT IN ('id') 
ORDER BY COLUMN_NAME 

SET @sqlstring = 'update t1 ' +stuff(@columnNames, len(@columnNames),1,'') + ' 
FROM @t t1
join @t t2 on t1.id =' + cast(@idto as varchar) + '
and t2.id = ' + cast(@idfrom as varchar)

EXEC( @sqlstring )
0 голосов
/ 02 августа 2011

Я думаю, что вы можете создать строку вставки типа "вставить в таблицу1 ... выбрать .. из таблицы2", а затем выполнить ее с помощью sp_executesql.вам нужно будет удалить лишнее из строк столбца, и это вообще не проверяется, просто идея)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...