Коллеги, помогите пжлст, нужно сварганить код, который выдаст динамический набор столбцов. Со сбором данных проблем нет, а вот их компоновка в итоговый вид вызвала затруднения.
Вот кусочек кода, который никак не хочет заработать:
create table #result (id int identity, data varchar(255) null)
insert into #result select 'Asset'
declare @str nvarchar(5), @sql varchar(255), @asset varchar(100)
select @str = '1', @asset = 'ffff'
select @sql = 'alter table #result add ND' + @str + ' nvarchar(255) null'
exec(@sql)
select @asset = 'ffff'
Вот до этого месты всё было хорошо, я сумел добавить динамическое поле в таблу. А дальше затык. Мне нужно ессно залить данные, а проапдейтить не получается:
1. Такой вариант "работает", но не срабатывает, т.е. в таблице ничего не меняется, но ошибок нет
EXECUTE sp_executesql
N'update #result set @column = @asset2 where id = 1',
N'@asset2 varchar(100), @column varchar(5)',
@asset2 = @asset, @column = 'ND1'
2. Выдаёт ошибку: "Incorrect syntax near '+'."
EXECUTE sp_executesql
N'update #result set ND' + @str + ' = @asset2 where id = 1',
N'@asset2 varchar(100)',
@asset2 = @asset
3. Этот, вариант первого, вообще непонятное: "String or binary data would be truncated. The statement has been terminated."
EXECUTE sp_executesql
N'update #result set @column = @asset2 where id = 1',
N'@asset2 varchar(100), @column varchar(5)',
@asset2 = 'dddddd', @column = 'ND1'
И как быть? Почему alter table принимает динамическое название столбца, а update ни в какую? Что я делаю не так? Задрал это динамический sql уже до немогу (точнее конечно нежно любимая фирма Microsoft).