SQL身份(1,1)从0开始

基思

我有一个带有标识集的SQL表:

CREATE TABLE MyTable(
    MyTableID int IDENTITY(1,1) NOT NULL,
    RecordName nvarchar(100) NULL)

这张桌子发生了什么事,导致行为异常。我需要找出什么。

插入时:

INSERT MyTable(RecordName) 
VALUES('Test Bug')

SELECT SCOPE_IDENTITY() -- returns 0
SELECT * FROM MyTable   -- displays: 0, 'Test Bug'

这是一个问题,因为此插入内容上方的代码期望第一个ID为1-我无法弄清楚IDENTITY(1,1)最终的结果是0

如果(在执行之前INSERT)我检查了身份,则返回null:

DBCC CHECKIDENT (MyTable, NORESEED)

检查身份信息:当前身份值'NULL',当前列值'NULL'。

我知道几种解决此问题的方法;我首先需要知道表格如何进入此状态?

我知道CHECKIDENT返回null的唯一方法是表是否刚刚创建,但是IDENTITY(1,1)很荣幸能得到INSERT原因SCOPE_IDENTITY()1

或者,0如果我强制-1使用当前种子(DBCC CHECKIDENT (MyTable, RESEED, -1)或使用SET IDENTITY_INSERT MyTable ON),则可以获取下一个ID 但是随后检查报告该当前-1种子(而不是null),所以这不可能发生。

数据库如何进入列具有的状态IDENTITY(1,1)DBCC CHECKIDENT (MyTable, NORESEED)返回null,但下一个INSERT原因SCOPE_IDENTITY()0

加雷斯

我希望有人/某事已经发生:

DBCC CHECKIDENT ('dbo.MyTable', RESEED, 0);

如果运行以下命令:

CREATE TABLE dbo.MyTable(
    MyTableID int IDENTITY(1,1) NOT NULL,
    RecordName nvarchar(100) NULL
);

DBCC CHECKIDENT ('dbo.MyTable', RESEED, 0);
DBCC CHECKIDENT ('dbo.MyTable', NORESEED);

第二个CHECKIDENT仍然返回NULL

检查身份信息:当前身份值'NULL',当前列值'NULL'。

但是,下一个标识值将为0。这是记录的行为,MSDN指出:

当前身份值设置为new_reseed_value。如果自创建以来没有将任何行插入到表中,则在执行DBCC CHECKIDENT之后插入的第一行将使用new_reseed_value作为标识否则,插入的下一行将使用new_reseed_value +1。如果new_reseed_value的值小于标识列中的最大值,则对该表的后续引用将生成错误消息2627。

这仅适用于其中的last_valuesys.identity_columns仍为NULL的新创建/截断的表如上所述,如果要插入一行,将其删除,然后重新设置为0,则新标识仍为1。

完整的测试脚本

IF OBJECT_ID(N'dbo.T', 'U') IS NOT NULL
    DROP TABLE dbo.T;

CREATE TABLE dbo.T(ID INT IDENTITY(1,1) NOT NULL);
INSERT dbo.T OUTPUT inserted.* DEFAULT VALUES;
-- OUTPUTS 1

DELETE dbo.T;
DBCC CHECKIDENT ('dbo.T', RESEED, 0);
INSERT dbo.T OUTPUT inserted.* DEFAULT VALUES;
-- OUTPUTS 1

TRUNCATE TABLE dbo.T;
DBCC CHECKIDENT ('dbo.T', RESEED, 0);
INSERT dbo.T OUTPUT inserted.* DEFAULT VALUES;
-- OUTPUTS 0

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

WebAudio LFO:范围从{-1,1}到{0,1}

提取包含0 | 0,0 | 1,1 | 0和1 | 1的文件

XMLStreamException: ParseError at [row,col]:[1,1] ; 开始标签前只允许空白内容,而不是 [

在Python中,如何对嵌套列表求和:[[1,0],[1,1],[1,0]]→[3,1]

ImageDataGenerator 重新缩放为 [-1,1] 而不是 [0,1]

缩放数据范围从[0,1]到[-1,1](以熊猫为单位)

SQL Server RANK() 从 1 开始

用于生成 [((0,0),0), ((0,1),0), ((1,0),0), ((1,1),0)] 的代码实际上给出了 [0 , 0, 0, 1, 1, 0, 1, 1],如何解决?

如何修复'ValueError:形状(1,3)和(1,1)未对齐:3(dim 1)!= 1(dim 0)'错误

ValueError:形状(1,1)和(4,1)未对齐:1(dim 1)!= 4(dim 0)

For 循环输出 0,-1,1,-2,2,-3,3

SU setgid:拒绝权限,SUDO:PERM_ROOT 0,-1,1拒绝权限

如何将数据从[-1,1]转换为[0,255]?

indexpath.row从1而不是0开始

如何从1而不是0开始排列键?

Terraform Range 函数从 1 而不是 0 开始

forEach 索引从 1 而不是 0 开始计数?

Microsoft SQL Server 中的 Identity(1,1) - 是否有实际理由使用 1,1 以外的值作为种子/增量?

从1开始而不是列表的0开始计算索引

每财政年度如何从1开始插入身份?

我希望我的 PK 的身份种子从 1 开始

R中的多元GARCH(1,1)

getActiveCell()始终返回1,1

Macbook Pro 1,1上的Ubuntu

SQL Server IDENTITY(1,1)列未与UpdatedDate同步生成

如何为Keras中的图层设置二进制权重值(0,1)或(-1,1)?

在R ggplot2中,包括stat_ecdf()端点(0,0)和(1,1)

熊猫的to_sql索引从1开始

(VBA)何时使用.cell(1,1)或.cell(1,1)。值引用