Вот фрагмент кода, который объединяет все столбцы в данной таблице.
IF OBJECT_ID('tempdb..#temp1') IS NOT NULL
DROP TABLE #temp1
create table #temp1(id float null, value nvarchar(100) null)
insert into #temp1 values(1, 'xyz')
insert into #temp1 values(2, 'pqr')
insert into #temp1 values(null, 'lmn')
select * from #temp1
id value
---------------------- ------------
1 xyz
2 pqr
NULL lmn
DECLARE @sql nvarchar(max)
SELECT @sql = ISNULL(@sql + ')' + '+''|''+ ','') + '''' + c.name + '=''+' + 'convert(nvarchar(max), COALESCE(' + c.name + ', '''')'
FROM tempdb.sys.all_columns c
WHERE Object_ID = OBJECT_ID('tempdb..#temp1')
SET @sql = 'SELECT ' + @sql + ')+' + ''''' FROM #temp1'
EXEC( @sql)
возвращает результат правильно.
--------------------------------
id=1|value=xyz
id=2|value=pqr
id=0|value=lmn
Для другой таблицы результат также выглядит хорошо.
IF OBJECT_ID('tempdb..#temp2') IS NOT NULL
DROP TABLE #temp2
create table #temp2(city nvarchar(100) null, temp1 float null, temp2 float null)
insert into #temp2(city, temp1, temp2) values('new york', 20, 12)
insert into #temp2(city, temp1, temp2) values('chicago', 15, 17)
insert into #temp2(city, temp1, temp2) values('portland', null, 5)
select * from #temp2
city temp1 temp2
---------------------------- ---------------------- ----------------------
new york 20 12
chicago 15 17
portland NULL 5
result
city=new york|temp1=20|temp2=12
city=chicago|temp1=15|temp2=17
city=portland|temp1=0|temp2=5
Теперь, то, что я хочу сделать, является совершенно противоположным, поскольку данные пары ключ-значение возвращают строки в формате столбца и значения.
например, для
city=chicago|temp1=15|temp2=17
city=portland|temp1=0|temp2=5
city temp1 temp2
--------------------
chicago 15 17
portland NULL 5