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