触发更改自动增量值

时间:2011-06-17 15:23:17

标签: sql sql-server-2005 triggers

我有一个简单的税率表

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

CREATE TABLE [dbo].[TaxRates](
    [Id] [bigint] IDENTITY(1,1) NOT NULL,
    [Name] [nvarchar](50) NULL,
 CONSTRAINT [PK_TaxRates] PRIMARY KEY CLUSTERED 
(
    [Id] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

如果用户删除了记录,我希望在下次插入时不要更改自动增强器。

要有更多的许可。

现在我有3条记录,ID为0,1和2.当我删除I​​d 2的行时,稍后我添加下一个税率,我希望在此表中有记录,如0,1,2之前。 不应该有像0,1,2,4,6那样的差距。它必须是触发器。

你可以帮忙吗?

2 个答案:

答案 0 :(得分:1)

您需要接受差距或不使用IDENTITY

  1. id应该没有外在意义
  2. 您无法更新IDENTITY值
  3. IDENTITY列始终有空白
  4. 在这种情况下,您需要更新昂贵的群集Pk
  5. 外键怎么样?你需要一个CASCADE
  6. 可以在读取时使用ROW_NUMBER()生成连续数字
  7. 没有IDENTITY(无论是否加载此表或其他内容)在加载时都不会是并发安全的
  8. 尝试插入间隙(通过INSTEAD OF触发器)在加载时不会是并发安全的
  9. (编辑)历史记录表无论如何都可能包含已删除的值

答案 1 :(得分:0)

一个选项,如果标识列已成为组织中传递的内容,则将该列复制到同一个表中的非标识列中,您可以随意修改这些新的id值,同时保留实际的标识字段。

打开和关闭identity_insert可以允许您插入标识值。