1818IP-服务器技术教程,云服务器评测推荐,服务器系统排错处理,环境搭建,攻击防护等

当前位置:首页 - 数据库 - 正文

君子好学,自强不息!

在Oracle标识列里插入特定的值

2022-11-19 | 数据库 | gtxyzz | 573°c
A+ A-

Oracle标识列大家都有一些了解,下面就为您详细介绍在Oracle标识列里插入特定的值的实现方法,如果您对此方面感兴趣的 话,不妨一看。

尽管你可以对Oracle标识列(identity column)的值及其任意值的用处有千条万条理由,但是和你共同工作的一些人会坚持在给定的表格里使用连续的主关键字(PK)。然后,当发票号丢失的时候,他们就会恐慌、害怕被起诉、掩盖错误,甚至更糟。

为了解决这个问题,你可以创建一个带有Oracle标识列的表格,并用一些数据行来填充它:

--Createatesttable. 
CREATETABLETestIdentityGaps 
( 
IDintIDENTITYPRIMARYKEY, 
Descriptionvarchar(20) 
) 
GO 
--Insertsomevalues.ThewordINTOisoptional: 
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

现在,删除几个数据行:

DELETETestIdentityGaps 
WHEREDescriptionIN('Two','Five')

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

INSERT[INTO]TestIdentityGaps(Description)VALUES('TwoPointOne') 
INSERT[INTO]TestIdentityGaps(Description)VALUES('FivePointOne') 
GO 
SELECT*FROMTestIdentityGaps

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

--TryinsertinganexplicitIDvalueof2.Returnsawarning. 
INSERTINTOTestIdentityGaps(id,Description)VALUES(2,'TwoPointOne') 
GO

为了解决这个问题,SQL服务器2000用IDENTITY_INSERT来进行设置。为了强行插入一个带有特定值的数据行,你需要发出命令,然后在后面接上具体插入的内容:

SETTestIdentityGapsON 
INSERTINTOTestIdentityGaps(id,Description)VALUES(2,'TwoPointOne') 
INSERTINTOTestIdentityGaps(id,Description)VALUES(5,'FivePointOne') 
GO 
SELECT*FROMTestIdentityGaps

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

注意:对IDENTITY_INSERT的设置可以在任何特定的时候用在数据库里的某个表格上。如果需要在一个或者多个表格里填补空缺,你就必须用具体的命令来明确地指明每个表格。

你可以在一个带有标识列的表格里插入一个具体的值,但是要这样做的话,你必须首先把IDENTITY_INSERT的值设置为ON。如果你没有,你就会看到一条错误消息。即使你把IDENTITY_INSERT的值设置为了ON,但是如果再插入一个已有的值的话,你还是会看到错误消息。

本文来源:1818IP

本文地址:https://www.1818ip.com/post/10135.html

免责声明:本文由用户上传,如有侵权请联系删除!

发表评论

必填

选填

选填

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。