1

私はトリガーを書いていて、挿入されたものを使用しています

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 に答える