我正在尝试将最后一个id插入表中。 我正在使用
SELECT IDENT_CURRENT('TABLE')
但问题是它没有返回最后插入的id,它返回最大插入id。
例如,如果我这样做:
INSERT INTO 'TABLA' (ID) VALUES (100)
SELECT IDENT_CURRENT('TABLE') returns 100
但如果我这样做
INSERT INTO 'TABLA' (ID) VALUES (50)
SELECT IDENT_CURRENT('TABLE') returns 100
我希望得到50
我需要特定表的ID,并且我会以动态方式生成id,因此它不是身份 我该怎么办?
答案 0 :(得分:5)
从您的代码中看,ID看起来不是身份(自动增量)列,因此IDENT_CURRENT不会按照您的预期执行。
如果要查找插入的最后一行,则需要一个表示插入时间的日期时间列,然后您可以执行以下操作:
SELECT TOP 1 [ID] FROM TABLEA ORDER BY [InsertedDate] DESC
编辑:补充说明:
答案 1 :(得分:1)
SELECT SCOPE_IDENTITY()
将返回当前会话中插入的最后一个值。
的修改
那么你要做的是最好的方法,只需确保ID列是IDENTITY列,IDENT_CURRENT('Table_name'),@ @ IDENTITY和SCOPE_IDENTITY()返回Identity列生成的最后一个值。
如果ID列不是标识列,则所有这些函数都将返回NULL。
答案 2 :(得分:1)
SQL Server无法跟踪插入IDENTITY
列的最后一个值,尤其是在使用SET IDENTITY_INSERT ON;
时。但是,如果您手动指定要插入的值,则不需要SQL Server来告诉您它是什么。您已经知道它是什么,因为您只是在INSERT
语句中明确指定了它。
如果您无法让代码跟踪 刚刚插入 的值,并且无法将表更改为具有默认值的DateInserted列CURRENT_TIMESTAMP(这将允许您查看最后插入的行),也许您可以向记录所有插入的表添加触发器。