批量插入数据后怎么能得到这些记录的标识列的ID值?

北京的雾霾天 2006-11-24 03:33:45
我的数据表有一个标识列ID, 类型为GUID(uniqueidentifier),默认为值newID(),在这个表中我想一次插入多行数据,那么我怎么能得到刚插入的这些行的ID的值呢?
...全文
179 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
OracleRoob 2006-11-24
  • 打赏
  • 举报
回复
如果用int型的话,每次取表中已存在的最大值,更新待追加数据的ID,一次性追加即可。

假设:待追加数据的ID分别为1、2、3...,已存在的最大ID为1000,则直接更新加上1000。

处理时使用事务,确保数据处理的一致性和完整性。
北京的雾霾天 2006-11-24
  • 打赏
  • 举报
回复
wangtiecheng(不知不为过,不学就是错!) ( ) 信誉:100 Blog
的说法是我想用的,这个对GUID来说可行.

可是如果这个列的类型要是int是不是就不好做了?
OracleRoob 2006-11-24
  • 打赏
  • 举报
回复
因为Newid()生成的数据是不重复的,所以在哪儿生成都一样,不会出现关键字重复。
OracleRoob 2006-11-24
  • 打赏
  • 举报
回复
把已存在数据的ID放入临时表的方法不太可行,因为数据量会越来越大,应该把需要追加的数据的ID在临时表中生成。
中国风 2006-11-24
  • 打赏
  • 举报
回复
用触发器写入临时表或其它表
OracleRoob 2006-11-24
  • 打赏
  • 举报
回复
将这些需要追加的数据事先在临时表中处理即可。

即在追加到正式表中之前,把ID数据生成,也就是说这种情况下你的正式表中ID默认值是用不上的。
gahade 2006-11-24
  • 打赏
  • 举报
回复
--插入前先找到有哪些id
select id into #t_before from 表

insert语句

--插入后和插入前比较找到新插入的
select * from 表 where id not in (select id into #t_before from 表)
caixia615 2006-11-24
  • 打赏
  • 举报
回复
UP,学习~
xiaoku 2006-11-24
  • 打赏
  • 举报
回复
乌龟说的可以
dawugui 2006-11-24
  • 打赏
  • 举报
回复
插入之前把存在的ID放在一临时表#tb.

插入之后进行比较.

select * from tb where id not in (select id from #tb)

22,210

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧