sql >> Databáze >  >> RDS >> Sqlserver

Název sloupce Dynamic SQL Server Pivot ( UNPIVOT ) na hodnotu řádku

Takže máte několik problémů... první je, že to vyžaduje dynamické SQL, protože tabulka a sloupce nejsou známy předem, takže nemůžete použít jednoduchý unpivot.

To také znamená, že budete muset získat názvy sloupců ze systémových tabulek.

Váš druhý problém je, že všechny vaše datové typy jsou neznámé, takže musíte všechny sloupce přetypovat na něco, co podporuje vše a jakoukoli délku... varchar(max).

Takže s ohledem na tyto dvě překážky je zde řešení:

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 */

A konečně, nemohu s čistým svědomím doporučit řešení, které používá dynamické SQL, aniž bych varoval před nebezpečím, které s tím souvisí (jak z hlediska výkonu, tak z hlediska potenciálu injekce). Přečtěte si tento skvělý článek, pokud si chcete rozšířit své znalosti na toto téma.

http://www.sommarskog.se/dynamic_sql.html




  1. Vložení času do databáze

  2. jaká je užitečnost typu pole?

  3. Chyba při vytváření tabulky MariaDB s cizím klíčem

  4. Stránka DataTables 2 stránkování nevolá Magnific Popup