赛迪网 > IT技术 数据库 > 精彩更新
  IT资讯搜索
 
IT产品搜索

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

发布时间:2007.03.19 04:47     来源:赛迪网技术社区    作者:yuanyang





尽管你可以对标识列(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,但是如果再插入一个已有的值的话,你还是会看到错误消息。 (T004)

让MySQL数据库自动恢复的具体操作

利用数据库内建工具辅助性能分析和优化


[ 发表评论 ] 字体[  ] [ 打印 ] [ 进入博客 ] [ 进入论坛 ]  [ 推荐给朋友 ]
  相关文章
· 内存数据库在BSS账务处理中的应用 (03-16) · Linux平台下数据库资源使用情况分析 (03-14)
· 数据库系统安全框架与其各层安全技术 (03-13) · 用ANSI SQL编写跨平台的数据库应用程序 (03-13)
· MySQL数据库中关于网络安全的解决方案 (03-12) · 一山无二虎:数据库时代是否即将终结? (03-09)
· 一山无二虎:数据库时代是否即将终结 (03-09) · 易混淆概念 Instance和数据库的区别 (03-09)
· 数据库系统的安全框架及各层安全技术 (03-07) · .NET数据库应用程序中存储过程的应用 (03-07)
  客户需求反馈表
* 姓  名:
更多资料  了解方案  认识厂商
* 单位名称:
* 联系电话:
* 电子邮件:
  赛迪推荐  
  手机·资费 ·新品·导购·评测·手机资费·宽带
手机搜索  诺基亚 N73 MOTO Z6
  IT产品 ·笔记本·台式机·服务器·打印·投影
IT产品搜索 
  IT技术 ·开发·网管·安全·数据库·操作系统
  博客·论坛 ·曾剑秋·项立刚·Java学习·网管