Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Tên cột Dynamic SQL Server Pivot (UNPIVOT) thành một giá trị hàng

Vì vậy, bạn có một vài vấn đề ... đầu tiên là điều này yêu cầu sql động vì bảng và cột không được biết trước vì vậy bạn không thể chỉ sử dụng một thao tác bỏ chia đơn giản.

Điều đó cũng có nghĩa là bạn sẽ phải lấy tên cột từ các bảng hệ thống.

Vấn đề thứ hai của bạn là tất cả các kiểu dữ liệu của bạn đều không xác định, vì vậy bạn phải truyền tất cả các cột đến một thứ có thể hỗ trợ mọi thứ và bất kỳ độ dài nào ... varchar (max).

Vì vậy, với hai trở ngại đó trong tâm trí, đây là một giải pháp:

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

Cuối cùng, tôi không thể thực sự đề xuất một giải pháp sử dụng sql động mà không có cảnh báo về những nguy hiểm liên quan đến việc đó (từ cả quan điểm hiệu suất và khả năng tiêm). Đọc bài viết tuyệt vời này nếu bạn muốn nâng cao kiến ​​thức của mình về chủ đề này.

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. SQL Server datetime LIKE chọn?

  2. Bắt tất cả con cái của một phụ huynh bằng cách sử dụng truy vấn MSSQL

  3. com.microsoft.sqlserver.jdbc.SQLServerException:Kiểu dữ liệu biến thể không được hỗ trợ

  4. SQL Server có đảm bảo việc chèn tuần tự cột nhận dạng không?

  5. Nhận AVG bỏ qua giá trị Null hoặc Zero