我正在编写一个触发器,并且我正在使用插入的 Inserted 是单行,例如
ColumnX |ColumnY|ColumnZ|
=========================
A | B |C |
我想像这样将结果插入另一个表
ColumnName |Value|
==================
ColumnX | A |
ColumnY | B |
ColumnZ | C |
我有很多桌子,我该怎么做?
我正在编写一个触发器,并且我正在使用插入的 Inserted 是单行,例如
ColumnX |ColumnY|ColumnZ|
=========================
A | B |C |
我想像这样将结果插入另一个表
ColumnName |Value|
==================
ColumnX | A |
ColumnY | B |
ColumnZ | C |
我有很多桌子,我该怎么做?
UNPIVOT
结果集,然后插入它们:
INSERT INTO Anothertable(Columnname, value)
SELECT Columnname, value
FROM tablename t
UNPIVOT
(
value
FOR ColumnName IN(ColumnX, ColumnY, ColumnZ)
) AS u;
要动态地做到这一点:
DECLARE @cols AS NVARCHAR(MAX);
DECLARE @query AS NVARCHAR(MAX);
select @cols = STUFF((SELECT distinct ',' +
QUOTENAME(Columnname)
FROM table1 t
UNPIVOT
(
value
FOR ColumnName IN(ColumnX, ColumnY, ColumnZ)
) AS u
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
, 1, 1, '');
SET @query = 'SELECT Columnname, value
FROM table1 t
UNPIVOT
(
value
FOR ColumnName IN( ' + @cols + ' )
) AS u;'
execute(@query);
CREATE TRIGGER TriggerName
ON YourDatabase.TableName
AFTER INSERT
AS
BEGIN
INSERT INTO OtherTable (ColumnX, ColumnY, ColumnZ)
SELECT ColumnX, ColumnY, ColumnZ
FROM inserted
END
GO