sql-server - 您如何知道下一个身份栏会是什么?

标签 sql-server tsql identity

是否有一个 tsql 查询来告诉它期望用于下一行插入的 SQL Server 标识列值?

编辑添加:

我删除并重新创建了一个表

[personID] [int] IDENTITY(1,1) NOT NULL

作为我的 CREATE TABLE 命令的一部分。我还尝试重新播种标识列,同时删除该表中的所有信息,但这并不总是有效。这让我想知道是否有办法查看 SQL 期望对下一个标识列号使用什么。

最佳答案

您可能想要使用 SCOPE_IDENTITY 而不是 @@IDENTITY 将其限制为当前范围内的标识值。这可以避免触发器将新的标识值插入到其他表中,而不是插入到您刚刚插入的表中。

但是你可以计算出下一个身份值是什么

SELECT IDENT_CURRENT('mytable') + IDENT_INCR('mytable') FROM mytable

问题是你不能保证这就是值。 您必须拥有一个锁,以便在运行表时拒绝表上的其他插入,以确保该值准确。另外,当你用完 32 位整数后,我不知道逻辑是什么。不知道是翻车还是失败。

编辑: 我刚刚对此进行了测试(请参阅下面的 SQL),当没有数据时它不会返回正确的值。 使用 DBCC CHECKIDENT ('tablename', RESEED, 200) 重新播种实际上导致下一个值是 201 而不是 200。

CREATE TABLE willtest (myid integer IDENTITY(1,1), myvalue varchar(255))

SELECT IDENT_CURRENT('willtest') + IDENT_INCR('willtest')

INSERT INTO willtest (myvalue)
VALUES ('1')
INSERT INTO willtest (myvalue)
VALUES ('2')
INSERT INTO willtest (myvalue)
VALUES ('3')
INSERT INTO willtest (myvalue)
VALUES ('4')
INSERT INTO willtest (myvalue)
VALUES ('5')
INSERT INTO willtest (myvalue)
VALUES ('6')
INSERT INTO willtest (myvalue)
VALUES ('7')
INSERT INTO willtest (myvalue)
VALUES ('8')

SELECT IDENT_CURRENT('willtest') + IDENT_INCR('willtest')

DBCC CHECKIDENT ('willtest', RESEED, 200)

SELECT IDENT_CURRENT('willtest') + IDENT_INCR('willtest')

INSERT INTO willtest (myvalue)
VALUES ('200')
INSERT INTO willtest (myvalue)
VALUES ('201')
INSERT INTO willtest (myvalue)
VALUES ('202')
INSERT INTO willtest (myvalue)
VALUES ('203')
INSERT INTO willtest (myvalue)
VALUES ('204')
INSERT INTO willtest (myvalue)
VALUES ('205')
INSERT INTO willtest (myvalue)
VALUES ('206')
INSERT INTO willtest (myvalue)
VALUES ('207')

SELECT IDENT_CURRENT('willtest') + IDENT_INCR('willtest')

SELECT * FROM willtest

DROP TABLE willtest

关于sql-server - 您如何知道下一个身份栏会是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/562578/

相关文章:

node.js - Sequelize 不适用于 Heroku,但适用于本地

c# - 检查现有 ID,更新或插入 CheckBox 中的值

windows - 如何确定 Windows 计算机的身份?

sql - 如何从 T-SQL 存储过程返回表

TSQL 用空字符串替换所有非 a-z/A-Z 字符

windows-phone-8 - UserExtendedProperties ANID2 是否跨设备一致?

sql-server - SQL 查询以在 6 个月的时间内查找该月的最后一天

sql-server - CLR SQL Server UDF 问题

sql - 当 IN 子句有子查询时,为什么 SQL Server 执行群集扫描?

asp.net - 双数据绑定(bind)级联 DropDownList 到 FormView 中的两个 SqlDataSource