快捷搜索:

在标识列里插入特定的值

只管你可以对标识列(identity column)的值及其随意率性值的用场有千条万条理由,然则和你合营事情的一些人会坚持在给定的表格里应用继续的主关键字(PK)。然后,当发票号损掉的时刻,他们就会惊恐、害怕被起诉、掩饰笼罩差错,以致更糟。

为了办理这个问题,你可以创建一个带有标识列的表格,并用一些数据行来添补它:

-- Create a test table.

CREATE TABLE TestIdentityGaps

(

ID int IDENTITY PRIMARY KEY,

Description varchar(20)

)

GO

-- Insert some values. The word INTO is optional:

INSERT [INTO] TestIdentityGaps (Description) VALUES ('One')

INSERT [INTO] TestIdentityGaps (Description) VALUES ('Two')

INSERT [INTO] TestIdentityGaps (Description) VALUES ('Three')

INSERT [INTO] TestIdentityGaps (Description) VALUES ('Four')

INSERT [INTO] TestIdentityGaps (Description) VALUES ('Five')

INSERT [INTO] TestIdentityGaps (Description) VALUES ('Six')

GO

现在,删除几个数据行:

DELETE TestIdentityGaps

WHERE Description IN('Two', 'Five')

在我们编写代码的时刻,我们知道“二(Two)”和“五(Five)”这两个值丢了。我们想要插入两个数据行来填补这些空白。两个简单的INSERT述说式无法满意要求;然则,它们会在序列的结尾创建主关键字。

INSERT [INTO] TestIdentityGaps (Description) VALUES ('Two Point One')

INSERT [INTO] TestIdentityGaps (Description) VALUES ('Five Point One')

GO

SELECT * FROM TestIdentityGaps

你也无法明确地设置标识列的值:

-- Try inserting an explicit ID value of 2. Returns a warning.

INSERT INTO TestIdentityGaps (id, Description) VALUES(2, 'Two Point One')

GO

为了办理这个问题,SQL办事器2000用IDENTITY_INSERT来进行设置。为了强行插入一个带有特定值的数据行,你必要发出敕令,然后在后面接上详细插入的内容:

SET TestIdentityGapsON

INSERT INTO TestIdentityGaps (id, Description) VALUES(2, 'Two Point One')

INSERT INTO TestIdentityGaps (id, Description) VALUES(5, 'Five Point One')

GO

SELECT * FROM TestIdentityGaps

现在你可以看到新的数据行已经用指定的主关键字值插入了。

留意:对IDENTITY_INSERT的设置可以在任何特定的时刻用在数据库里的某个表格上。假如必要在一个或者多个表格里填补空白,你就必须用详细的敕令来明确地指明每个表格。

你可以在一个带有标识列的表格里插入一个详细的值,然则要这样做的话,你必须首先把IDENTITY_INSERT的值设置为ON。假如你没有,你就会看到一条差错消息。纵然你把IDENTITY_INSERT的值设置为了ON,然则假如再插入一个已有的值的话,你照样会看履新错消息。

您可能还会对下面的文章感兴趣: