加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sql – 行为不端的身份

发布时间:2020-12-12 08:57:05 所属栏目:MsSql教程 来源:网络整理
导读:执行以下脚本,将表创建并填充到dev数据库中. SET NOCOUNT ONDrop Table dbo.RegionGOCREATE TABLE dbo.Region( RegionId int IDENTITY(1,1),RegionName varchar(100) NOT NULL)GOINSERT INTO dbo.Region (RegionName) VALUES ('Region One'),('Region Two');G
执行以下脚本,将表创建并填充到dev数据库中.
SET NOCOUNT ON
Drop Table dbo.Region
GO
CREATE TABLE dbo.Region(
    RegionId      int             IDENTITY(1,1),RegionName    varchar(100)    NOT NULL
)
GO

INSERT INTO dbo.Region (RegionName) 
VALUES  ('Region One'),('Region Two');
GO

SELECT * FROM dbo.Region

你可以从一个表现良好的身份字段中得到的结果.

RegionId    RegionName
----------- ------------------
1           Region One
2           Region Two

现在让我们在Identity列中强制使用几个值.

SET NOCOUNT ON
Drop Table dbo.Region
GO
CREATE TABLE dbo.Region(
    RegionId      int             IDENTITY(1,RegionName    varchar(100)    NOT NULL
)
GO

SET IDENTITY_INSERT dbo.Region ON;
INSERT INTO dbo.Region (RegionId,RegionName) 
VALUES (-9,'Unknown'),(-99,'N/A');
SET IDENTITY_INSERT dbo.Region OFF;

INSERT INTO dbo.Region (RegionName) 
VALUES  ('Region One'),('Region Two');
GO

SELECT * FROM dbo.Region

输出是

RegionId    RegionName
----------- ------------------
-9          Unknown
-99         N/A
2           Region One
3           Region Two

RegionId = 1去哪了?

编辑在进一步研究中,如果您尝试两次相同的特技,Sql-Server不会跳过任何内容

SET NOCOUNT ON
Drop Table dbo.Region
GO
CREATE TABLE dbo.Region(
    RegionId      int             IDENTITY(1,('Region Two');
GO
SET IDENTITY_INSERT dbo.Region ON;
INSERT INTO dbo.Region (RegionId,RegionName) 
VALUES (-999,'Known-Unknown'),(-9999,'Really N/A');
SET IDENTITY_INSERT dbo.Region OFF;

INSERT INTO dbo.Region (RegionName) 
VALUES  ('Region Four'),('Region Five');
GO

SELECT * FROM dbo.Region

这里的输出是

RegionId    RegionName
----------- ------------------
-9          Unknown
-99         N/A
2           Region One
3           Region Two
-999        Known-Unknown
-9999       Really N/A
4           Region Four
5           Region Five

在之前的案例中,1失踪了.这里4没有丢失!

所以现在这是不可预测的,遗失的身份!

为什么RegionId = 1会丢失,但RegionId = 4不会丢失?!

解决方法

IDENTITY(1,1)适用于表中的第一行

由于您已经插入了两行,因此种子不再适用

下一个身份算法是在检测到表中存在现有记录时向种子开始添加一个,因为1可能已经被使用过.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读