Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Nama kolom Pivot SQL Server Dinamis ( UNPIVOT ) ke nilai baris

Jadi Anda memiliki beberapa masalah... yang pertama adalah ini memerlukan sql dinamis karena tabel dan kolom tidak diketahui sebelumnya sehingga Anda tidak bisa hanya menggunakan unpivot sederhana.

Itu juga berarti Anda harus mendapatkan nama kolom dari tabel sistem.

Masalah kedua Anda adalah bahwa semua tipe data Anda tidak diketahui sehingga Anda harus mentransmisikan semua kolom ke sesuatu yang dapat mendukung segalanya dan berapa pun panjangnya... varchar(max).

Jadi, dengan mempertimbangkan dua kendala tersebut, inilah solusinya:

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

Akhirnya, saya tidak dapat dengan hati nurani merekomendasikan solusi yang menggunakan sql dinamis tanpa peringatan bahaya yang terlibat di dalamnya (dari sudut pandang kinerja dan potensi injeksi). Baca artikel luar biasa ini jika Anda ingin menambah pengetahuan Anda tentang subjek ini.

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. adalah tipe yang tidak valid untuk digunakan sebagai kolom kunci dalam indeks

  2. SQL Server - gabung dalam saat memperbarui

  3. Cara terbaik untuk menerapkan jejak audit di SQL Server?

  4. Cara Menonaktifkan Change Data Capture (CDC) Pada Database di SQL Server - Tutorial SQL Server

  5. SqlConnection SqlCommand SqlDataReader IDisposable