将单行及其标题转换为两列

时间:2018-11-29 21:05:24

标签: sql-server tsql pivot unpivot

我有一个定义数据表,我正在使用On UPDATE触发器跟踪更改。目前,我已经通过一系列IF UPDATE([COLUMNNAME])检查来跟踪更改。但是,这样做的问题在于,如果将来再添加/删除/重命名列,则触发器将失败。

我想到了透视DELETED和INSERTED表的方法,将它们从具有标题的单行转换为两列,一列包含行标题,另一列包含行数据。然后将它们连接到标题上,并找到数据部分的不同之处。然后,我可以记录Header,OldData(已删除)和NewData(已插入)值。但是,到目前为止,我还无法做到这一点。我搜索了许多PIVOT和UNPIVOT示例,但是似乎没有一个完全符合我的需求。

例如:

ID    Name    Value1    Value2    Value3    Value4
1    Apple    10        1/1/18    25        10.0

收件人:

Header    Data
ID        1
Name      Apple
Value1    10
Value2    1/1/18
Value3    25
Value4    10

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

有时您需要提出不同的问题:如果您看一下示例,实际上就是要将列转换为行。如果我在SO上搜索“ sql将列转换为行”,则第一个结果是this question,答案将解决您的问题。