【SQLserver】单行数据根据列名生成多行数据
单行数据根据列名生成多行数据
1、原因
因为工作需要写个SQLserver的触发器,但写处理函数时,发现不能在函数里执行动态SQL,已经知道表名和列名,就是取不了列的值,在百度查了很久,才发现可以用 Apply 关键字 把单行数据根据列名生成多行数据,十分感谢!
2、代码示例
Select c.*
From 表名 A
Cross Apply ( values (cast((Select A.* for XML RAW) as xml))) B(XMLData)
Cross Apply (
Select Field = a.value('local-name(.)','varchar(100)')
,Value = a.value('.','varchar(max)')
From B.XMLData.nodes('/row') as C1(n)
Cross Apply C1.n.nodes('./@*') as C2(a)
Where a.value('local-name(.)','varchar(100)') not in ('过滤字段1','过滤字段2')
) C where A.过滤字段1='过滤字段1'and A.过滤字段2='过滤字段2'
3、返回
因为是工作数据就不展示实际数据了,具体可以试试