我必须通过传递列名作为输入来仅显示特定的列数据。
答案 0 :(得分:0)
使用动态SQL。但是请加入sys.columns以避免SQL注入攻击。 示例查询如下所示
DECLARE @qry NVARCHAR(MAX) =
'SELECT ' + STUFF((
SELECT ', ' + QUOTENAME(c.name)
FROM Report.InfoColumnOrder r
JOIN sys.columns c ON c.name = r.ColumnName AND c.object_id = object_id('dbo.Info')
WHERE u.UserId = @user
ORDER BY r.SN
FOR XML PATH(''), TYPE).value('.','nvarchar(max)'),1,2,'') +
' FROM dbo.Info'
;
EXEC sp_executesql @qry, N'@user int', @user = @userid;