当数据输入表格时,我需要执行一个触发器来获取记录,将其转换为所需的格式并插入另一个表格。
我的触发器如下
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
,但这也不起作用(但将其更改为静态查询有效)。
我很难在这里找出问题,因为它对我来说很好看。任何帮助将不胜感激!