Sql server 获取未标识的最后一个主键-使用触发器插入
我有一个insert触发器来插入表的主键VARCHAR。我想获取最后插入的主键值。 这是我的插入触发器Sql server 获取未标识的最后一个主键-使用触发器插入,sql-server,sql-server-2008,primary-key,Sql Server,Sql Server 2008,Primary Key,我有一个insert触发器来插入表的主键VARCHAR。我想获取最后插入的主键值。 这是我的插入触发器 ALTER TRIGGER dbo.equipment_insert_pk ON dbo.Equipment INSTEAD OF INSERT AS BEGIN SET NOCOUNT ON; declare @id int; declare @cat varchar(2); select @cat=CategoryID fr
ALTER TRIGGER dbo.equipment_insert_pk
ON dbo.Equipment
INSTEAD OF INSERT
AS
BEGIN
SET NOCOUNT ON;
declare @id int;
declare @cat varchar(2);
select @cat=CategoryID from INSERTED;
select @id=cast(max(right(EquipmentID,4)) as int) from Equipment where CategoryID=@cat;
set @id=isnull(@id,0)+1;
-- Insert statements for trigger here
insert into Equipment
select CategoryID+right('0000'+cast(@id as varchar(4)),4)
,CategoryID
,Location
,Detail
,'../BarcodeImage/'+CategoryID+right('0000'+cast(@id as varchar(4)),4)+'.jpeg' from INSERTED;
END
我试图编写一个函数来获取最后插入的主键值,但它似乎不起作用..因为在触发器之外没有插入的作用域。请帮助我。。
我在触发器中使用output子句尝试了这段代码,到目前为止没有结果
insert into Equipment
output INSERTED.EquipmentID into @Temp_Tbl
select CategoryID+right('0000'+cast(@id as varchar(4)),4)
,CategoryID
,Location
,Detail
,'../BarcodeImage/'+CategoryID+right('0000'+cast(@id as varchar(4)),4)+'.jpeg' from INSERTED;
有什么帮助吗?好的。几周前我遇到了完全相同的问题 我试过很多不同的方法,但都没有用。长话短说-我最后添加了一个类型为UNIQUEIDENTIFIER guid的新列 以您的示例为例,假设dbo.Equipment中有一个名为guid的列 大致来说,您可以这样做:
insert into Equipment
output INSERTED.EquipmentID, INSERTED.guid into @Temp_Tbl
select CategoryID+right('0000'+cast(@id as varchar(4)),4)
,CategoryID
,Location
,Detail
,'../BarcodeImage/'+CategoryID+right('0000'+cast(@id as varchar(4)),4)+'.jpeg'
,NEWID() -- new column
从插入
然后,您可以使用@Temp\u Tbl.guid查询dbo.device以获取插入的id。
例如:
从dbo.Equipment e(如果存在)中选择EquipmentID从@Temp_Tbl tt(如果tt.guid=e.guid)中选择*。旁白:触发器对一组行进行操作。您的触发代码假定插入了一行。您的PK是默认为NEWID的唯一标识符吗?如果是这样,为什么不首先生成NEWID,将其存储在触发器中的变量中,然后手动插入该值呢?我在这里发现了一个问题:选择@cat=CategoryID from INSERTED;。我认为,如果有人使用相同的语句插入两行具有不同CategoryID值的数据,那么这段代码将无法正常工作:insert INTO dbo.device…,CategoryID。。。值…,1,…,2@user92546是否有办法插入多行..触发器是否能正常工作?@shanirafi-通常,您会在触发器中写入insert,以根据INSERTED和任何其他需要的表进行所有计算,而不是从INSERTED中获取单个CategoryID。这样插入的行数就不重要了。如果需要,可以在中间处理中使用表变量,而不是标量。