带有pivot的动态查询触发器无法正常工作

时间:2016-11-18 01:32:37

标签: sql-server pivot dynamic-sql database-trigger

当数据输入表格时,我需要执行一个触发器来获取记录,将其转换为所需的格式并插入另一个表格。

我的触发器如下

ALTER TRIGGER [dbo].[InsertTriggTest]
ON [dbo].[testtable]
AFTER INSERT
NOT FOR REPLICATION
AS
  BEGIN
      SET NOCOUNT ON;

      DECLARE @var1 VARCHAR(100);

      INSERT INTO DBO.insertedtemp
      SELECT var1,
             var2,
             var3,
             var4,
             var5,
             var6
      FROM   table1 r
             JOIN table2 u
               ON r.var2 = u.var2
             JOIN inserted i
               ON u.id = i.id;

      SELECT @var1 = r.var3
      FROM   table1 r
             JOIN table2 u
               ON r.var2 = u.var2
             JOIN inserted i
               ON u.id = i.id;

      DECLARE @columns NVARCHAR(MAX)

      SELECT @columns = Stuff((SELECT DISTINCT ', ' + Quotename(value)
                               FROM   insertedtemp
                               FOR XML PATH(''), TYPE).VALUE('.', 'NVARCHAR(MAX)'), 1, 1, '');

      DECLARE @selectquery AS NVARCHAR(MAX);

      SELECT @selectquery = 'Select var1,' + @columns
                            + 'into temptable from ( Select i.var1,i.var2,i.var3 from InsertedTemp i ) P PIVOT ( MAX(var3) FOR var2 IN ('
                            + @columns + ') ) Pvt'

      EXECUTE(@selectquery);

      IF ( @var1 = 'test1' )
        BEGIN
            SELECT @sqlcmd = N'INSERT INTO test2(var1, ' + @columns
                             + ') select * from temptable';

            EXEC SP_EXECUTESQL
              @sqlcmd;
        END
  END;  

然而,@selectquery(动态)的执行并不起作用。当我将其更改为静态查询时,它工作正常。如果我提供@columns变量的值(而不是动态创建@columns),则查询无法正常工作。

我将@selectquery更改为简单的选择查询Select * from InsertedTemp,但这也不起作用(但将其更改为静态查询有效)。

我很难在这里找出问题,因为它对我来说很好看。任何帮助将不胜感激!

0 个答案:

没有答案