gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 14:07:29 24 4
gpt4 key购买 nike

是否有一个 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com