我有一张简单的表
CREATE TABLE tItem (PK_Item INT ITENTITY(1,1) NOT NULL, ItemID VARCHAR(15) NOT NULL)
其中ItemID是生成的标识符,通常是数字,但可能因客户和其他条件而异。
ItemID是EXEC @TempID = pGeneralIdentifierRetrieve NULL, NULL, @ItemType
目前,我已插入在存储过程中编写的新记录,并且工作正常。
我想尝试将插入重写为INSTEAD OF触发器。我有一个问题 - 如何引用INSERTED表中的行,以便我可以使用新的ItemID更新它们。 我知道我可以在AFTER INSERT TRIGGER中设置它,但这需要ItemID列为NULL。
感谢任何提示
答案 0 :(得分:0)
在触发器内部,您可以获得您尝试插入的内容
Select * from INSERTED
我不确定你在哪里获得你的proc所需的@ItemType来创建id
create trigger ti_tItem
on tItem
instead of insert
as
begin try
insert into tItem(ItemID)
select TempID from [The same code in your procedure]
where [something] = @ItemType
end try
begin catch
rollback transaction
end catch
答案 1 :(得分:0)
我终于破解了它。这不是一个很好的解决方案(对我来说),但它有效:
SELECT * INTO #MyInserted FROM INSERTED
SELECT @RowCount = COUNT(*) FROM #MyInserted WHERE ItemID IS NULL
WHILE @RowCount > 0
BEGIN
EXEC @TempID = pGeneralIdentifierRetrieve NULL, NULL, @ItemType
UPDATE TOP (1) #MyInserted SET ItemID = @TempID WHERE ItemID IS NULL
SET @RowCount = 0
SELECT @RowCount = COUNT(*) FROM #MyInserted WHERE ItemID IS NULL
END
INSERT INTO tItem (ItemID) SELECT (ItemID) FROM #MySelected