新在表中插入一行,现在想立即得到新插入的主键
新在表中插入一行,现在想立即得到新插入的主键,(因为当前状态下,可能还有表不断的被新插入记录,我插入的记录,可能已经不是最新的了,但我只想要我刚才插入的记录的主键),请问如何做?难道要加个锁?最好给个具体的例子!
如果是pl/sql,我可以用这个语句做:
insert ... returning .. into那如果是t/sql呢?用锁??
新在表中插入一行,现在想立即得到新插入的主键,(因为当前状态下,可能还有表不断的被新插入记录,我插入的记录,可能已经不是最新的了,但我只想要我刚才插入的记录的主键),请问如何做?难道要加个锁?最好给个具体的例子!
如果是pl/sql,我可以用这个语句做:
insert ... returning .. into那如果是t/sql呢?用锁??
解决方案 »
- 关于更新日期的问题!
- 这种报表格式如何实现?该如何查询数据表!诚心向大虾们学习!
- 关键字 'order' 附近有语法错误
- 有个公用数据库存储过程的问题请教?
- 什么错误? "将 expression 转换为数据类型 datetime 时发生算术溢出错误"
- sqlserver2000 中如何把备份设备指向局域网的其他机器
- 100分求助Sql Server 2005 使用DTS导出拉丁字符集到Excel时乱码
- 这个sql怎么写啊?
- mssql server2000安装问题
- 把一个旧的系统升级,需要重新构建数据库。现要把愿数据库中的部分内容(不是全部,但也很多)导入到新库中,两库(表)的结构不同。如何操作,能简便一些?谢谢!
- Access组合框怎么去掉重复值
- 求指点这个数据库怎么设计
after insert
as
begin
declare @id int
set @id=(select id from inserted)--假设ID是你表的主键
PRINT '你插入的数据的主键是'+convert(varchar(10),@id)
end
-- -----------t_mac 小编-------------
---希望有天成为大虾----
-- =========================================IF OBJECT_ID('tb') IS NOT NULL
DROP TABLE tb
GO
CREATE TABLE tb(id int primary key not null, b int)
go
create trigger kkkkk on tb
after insert
as
begin
declare @id int
set @id=(select id from inserted)--假设ID是你表的主键
PRINT '你插入的数据的主键是'+convert(varchar(10),@id)
end
insert into tb
select 1,2
go
/*------------
你插入的数据的主键是1(1 行受影响)
-------*/
如果插入了多个行,生成了多个标识值,则 @@IDENTITY 将返回最后生成的标识值。
如果语句触发了一个或多个触发器,该触发器又执行了生成标识值的插入操作,那么,在语句执行后立即调用 @@IDENTITY 将返回触发器生成的最后一个标识值。
如果对包含标识列的表执行插入操作后触发了触发器,并且触发器对另一个没有标识列的表执行了插入操作,则 @@IDENTITY 将返回第一次插入的标识值。
出现 INSERT 或 SELECT INTO 语句失败或大容量复制失败,或者事务被回滚的情况时,@@IDENTITY 值不会恢复为以前的设置。
@@IDENTITY 返回的是你执行的语句的标识值,而不会返回其他人并行执行的标识值。
http://www.cnblogs.com/insus/articles/2017786.html
http://www.cnblogs.com/insus/articles/1916702.html