Така че имате няколко проблема... първият е, че това изисква динамичен sql, тъй като таблицата и колоните не са известни предварително, така че не можете просто да използвате просто премахване на завъртането.
Това също означава, че ще трябва да получите имената на колоните от системните таблици.
Вторият ви проблем е, че всичките ви типове данни са неизвестни, така че трябва да прехвърлите всички колони към нещо, което може да поддържа всичко и всякаква дължина... varchar(max).
И така, имайки предвид тези две пречки, ето решение:
declare @yourTable varchar(50)
declare @yourKeyField varchar(50)
declare @yourKey varchar(50)
set @yourTable = 'MyTable' /** change to tablename or pass as parameter */
set @yourKeyField = 'ID' /** change to fieldname or pass as parameter */
set @yourKey = '5' /** change to key value or pass as parameter */
declare @query nvarchar(max)
select @query = COALESCE(@query+' union all ','') + 'select ''' + c.name + ''' as
[Column], Cast([' + c.name + '] AS VarChar(MAX)) as [Value] from ' + @yourTable + '
where ' + @yourKeyField + ' = ''' + @yourKey + '''' from syscolumns c
inner join sysobjects o on c.id = o.id and o.xtype = 'u'
where o.name = @yourTable order by c.colid
exec sp_executesql @query /** execute query */
И накрая, не мога с чиста съвест да препоръчам решение, което използва динамичен sql без предупреждение за опасностите, свързани с това (както от гледна точка на производителността, така и от потенциала за инжектиране). Прочетете тази отлична статия, ако искате да увеличите знанията си по темата.
http://www.sommarskog.se/dynamic_sql.html