1

我正在编写一个触发器,并且我正在使用插入的 Inserted 是单行,例如

ColumnX |ColumnY|ColumnZ|
=========================
 A      | B     |C      |

我想像这样将结果插入另一个表

ColumnName |Value|
==================
ColumnX    | A   |
ColumnY    | B   |
ColumnZ    | C   |

我有很多桌子,我该怎么做?

4

2 回答 2

2

UNPIVOT结果集,然后插入它们:

INSERT INTO Anothertable(Columnname, value)
SELECT Columnname, value
FROM tablename t
UNPIVOT
(
   value
   FOR ColumnName IN(ColumnX, ColumnY, ColumnZ)
) AS u;

SQL 小提琴演示


要动态地做到这一点:

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);

更新的 SQL Fiddle 演示

于 2013-02-12T15:28:51.047 回答
0
CREATE TRIGGER TriggerName
ON YourDatabase.TableName
AFTER INSERT 
AS
   BEGIN
        INSERT INTO OtherTable (ColumnX, ColumnY, ColumnZ) 
        SELECT ColumnX, ColumnY, ColumnZ
        FROM inserted
  END
GO
于 2013-02-12T15:34:37.753 回答