我有下表:
CREATE TABLE [T_Manufacture](
[ManufactureID] [int] IDENTITY(-2147483648,1) NOT NULL,
[Manufacture] [varchar](25) NULL,
[ManufactureDescription] [varchar](50) NULL)
我们可以看到ManufactureID
是从-2147483648
开始的标识列。因此,如果身份达到-1,则下一条记录应为0 (zero)
。可以跳过这条记录吗?我的意思是,我不想拥有值为zero
的ID。
请帮助。
谢谢。
答案 0 :(得分:1)
这是对Deepak的评论的详细阐述。
为什么有人会为id列使用负数?而且,如果您担心有20亿个值,那么您应该关注40亿并使用bigint
:
CREATE TABLE T_Manufacture (
ManufactureID bigint IDENTITY(1, 1) PRIMARY KEY, -- might as well declare it
Manufacture varchar(25),
ManufactureDescription varchar(50)
);
这是解决问题的最简单方法,并确保表格可以根据需要增长。
换句话说,正确的方式是跳过"跳过"一个特定的值是在该值之后启动身份枚举。或者,如果你真的想要:
CREATE TABLE T_Manufacture (
ManufactureID int IDENTITY(-1, -1) PRIMARY KEY, -- might as well declare it
Manufacture varchar(25),
ManufactureDescription varchar(50)
);
但是再一次,负面的ID似乎很荒谬。
答案 1 :(得分:0)
您可以使用触发器来控制...
CREATE TRIGGER SkipZeroManufacture ON T_Manufacture AFTER INSERT
AS
BEGIN
IF EXISTS (SELECT 'zero record inserted' FROM inserted AS I WHERE I.ManufactureID = 0)
BEGIN
INSERT INTO T_Manufacture (
Manufacture,
ManufactureDescription)
SELECT
I.Manufacture,
I.ManufactureDescription
FROM
inserted AS I
WHERE
i.ManufactureID = 0
DELETE T_Manufacture WHERE ManufactureID = 0
END
END
虽然这是一个糟糕的主意,因为它将在每个插入时触发,只检查一个值,并且需要维护新的或更新的列。它还将使用另一个ID切换0 ID' d记录。