我正在尝试插入具有相同数据和不同供应商ID的多行,这些供应商ID应用于XML列表,但不适用于while循环,请给我解决方案。
ALTER TRIGGER [dbo].[trginsert]
ON [dbo].[Employee_Test]
AFTER INSERT
AS
DECLARE @Name VARCHAR(50)
DECLARE @sal INT
SET @Name = (SELECT i.Emp_name FROM inserted AS i)
SET @sal = (SELECT i.Emp_Sal FROM inserted AS i)
DECLARE @count INT
SET @count = (SELECT COUNT(id) AS 'number of vendors'
FROM AspNetUsers
WHERE ERPMainCustID IS NOT NULL)
DECLARE @id INT
DECLARE @ids XML
SET @ids = (SELECT id AS [*]
FROM AspNetUsers
WHERE ERPMainCustID IS NOT NULL
FOR XML PATH('ID'), ROOT('IDs'), TYPE)
WHILE @id >= @count
BEGIN
INSERT INTO Employee_Test
VALUES (@Name, @sal, @id)
END
答案 0 :(得分:0)
SQL Server触发器不是每行运行一次,而是每条语句运行一次-因此,如果您的INSERT
语句一次插入10行(例如,通过使用SELECT .... FROM ...
子句),则可以得到触发器称为一次,但是Inserted
将包含 10行。编写触发器时,您需要考虑到这一点!
您需要以基于集合的方式处理Inserted
-不要指望它仅包含一行....而且:首先从{{1}中选择那些ID确实没有意义。 }转换为XML变量,然后对它们执行RBAR(逐列行)WHILE循环以插入.....:再次使用正确的基于集合的方法!
最后,您的触发器可能看起来像这样:
AspNetUsers