是否基于SQLServer2005中的另一列自动递增一列?
我在一个表中有两个主键列。第二列基于第一列。我向您展示了它们的数字,请看splr\U Slno是基于splr\U Id的 我为您展示另一个示例图 当我删除splr_Id“21”和splr_Slno“2”的记录时,应该是这样的 下面是一个触发器是否基于SQLServer2005中的另一列自动递增一列?,sql,triggers,primary-key,auto-increment,Sql,Triggers,Primary Key,Auto Increment,我在一个表中有两个主键列。第二列基于第一列。我向您展示了它们的数字,请看splr\U Slno是基于splr\U Id的 我为您展示另一个示例图 当我删除splr_Id“21”和splr_Slno“2”的记录时,应该是这样的 下面是一个触发器 ALTER TRIGGER [dbo].[trigger_i] ON [dbo].[table] AFTER DELETE AS BEGIN SET NOCOUNT ON; --Declarations declare @i
ALTER TRIGGER [dbo].[trigger_i]
ON [dbo].[table]
AFTER DELETE
AS
BEGIN
SET NOCOUNT ON;
--Declarations
declare @intSplrlid as int
declare @autoSplrslno as int
set @autoSplrslno=0
--Process
set @intSplrlid = (select splr_Id from deleted)
--set @autoSplrslno = (select splr_Slno from deleted)
update dbo.table set splr_Slno = @autoSplrslno+1 where dbo.table.splr_Id =@intSplrlid;
结束
第二条记录被删除了…,我想要的是当记录被删除时,splr\U Slno应该自动生成。我认为下面的代码应该可以工作。在不同的场景中尝试。我刚刚实现了逻辑。没有测试它。如果有什么错误,请告诉我
ALTER TRIGGER [dbo].[trigger1]
ON [dbo].[table1]
AFTER DELETE
AS
BEGIN
DECLARE @splr_Id INT, @increment INT = 1, @iterate_splr_Id int, @iterate_splr_Slno int
SELECT @splr_Id = splr_Id FROM DELETED
DECLARE cursorObj CURSOR LOCAL static FOR SELECT splr_Slno, splr_Id FROM dbo.table1 WHERE splr_Id = @splr_Id
OPEN cursorObj
FETCH NEXT FROM cursorObj into @iterate_splr_Slno, @iterate_splr_Id
WHILE @@FETCH_STATUS = 0
BEGIN
UPDATE dbo.table1 SET splr_Slno = @increment WHERE splr_Id =@iterate_splr_Id and splr_Slno = @iterate_splr_Slno
SET @increment = @increment + 1
FETCH NEXT FROM cursorObj into @iterate_splr_Slno, @iterate_splr_Id
END
CLOSE cursorObj
DEALLOCATE cursorObj
END
为什么要这样做?当删除2时,您希望将Slno的顺序设置为1 2 3 4。我的意思是你想重新安排序列?一种方法是通过循环生成游标并更新行。因为我想从用户推荐的前端删除记录。我希望在删除记录时自动生成splr_Slno。您是否使用存储过程进行删除?如果是,请告诉我。因此,我可以在SP中生成代码。或者,如果您需要Trigger,我将在Trigger.no中生成代码,方法是使用此查询“delete dbo.table where splr_Id=21和splr_Slno=2”,我正在使用一个触发器进行自动递增,但它显示了一个错误我正在更新我的问题抱歉,我仅在while循环计划中使用了它,但我不需要,而且我忘了删除它。我已经更新了我的答案。你能解释一下怎么了吗?是我的逻辑错误还是我的代码有问题?还是别的?让我们