sql标识列 如何在数据库的标识列里插入特定的值

如何在数据库的标识列里插入特定的值
尽管你可以对标识列(identity column)的值及其任意值的用处有千条万条理由 但是和你共同工作的一些人会坚持在给定的表格里使用连续的主关键字(PK) 然后 当发票号丢失的时候 他们就会恐慌 害怕被起诉 掩盖错误 甚至更糟
为了解决这个问题 你可以创建一个带有标识列的表格 并用一些数据行来填充它
Create a test table CREATE TABLE TestIdentityGaps(ID int IDENTITY PRIMARY KEY Description varchar( ))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 )GOSELECT * FROM TestIdentityGaps
你也无法明确地设置标识列的值
Try inserting an explicit ID value of Returns a warning INSERT INTO TestIdentityGaps (id Description) VALUES( Two Point One )GO
为了解决这个问题 SQL服务器 用IDENTITY_INSERT来进行设置 为了强行插入一个带有特定值的数据行 你需要发出命令 然后在后面接上具体插入的内容
SET TestIdentityGapsONINSERT INTO TestIdentityGaps (id Description) VALUES( Two Point One )INSERT INTO TestIdentityGaps (id Description) VALUES( Five Point One )GOSELECT * FROM TestIdentityGaps
现在你可以看到新的数据行已经用指定的主关键字值插入了
注意 对IDENTITY_INSERT的设置可以在任何特定的时候用在数据库里的某个表格上 如果需要在一个或者多个表格里填补空缺 你就必须用具体的命令来明确地指明每个表格
lishixinzhi/Article/program/Oracle/201311/16624