Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Dynamic SQL Server Pivot ( UNPIVOT ) име на колона към стойност на ред

Така че имате няколко проблема... първият е, че това изисква динамичен 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




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да импортирам файл на Excel в SQL Server?

  2. Създайте връзка в SQL Server 2017

  3. Намерете зависимости в SQL Server:sql_expression_dependencies

  4. Как тествате за съществуването на потребител в SQL Server?

  5. Пребройте последователни дублиращи се стойности в SQL