荷梅月剑 编程之路

这个世界没有偶然,有的只是必然
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

使用UNIQUEIDENTIFIER做为主键 返回值的解决方法

Posted on 2010-11-10 23:23  荷梅月剑  阅读(506)  评论(0编辑  收藏  举报

这段时间一直在忙个办公自动化项目,站内短消息一个大神写的,我发现把消息修改为已读有时会不好用,检查代码发现,原来是用UNIQUEIDENTIFIER做为主键

检查了存储过程,发现原来的存储过程是这样子的

 

 

代码
INSERT INTO SMS_Msg
(Sender,
[Content],SendTime,[Type],ReceiverStr,Enterprise_ID)
VALUES
(
@sender,@content,@sendtime,@type,@receivers,0)
declare @Table table(ID int identity(1,1),
MsgId
uniqueidentifier,SendTime datetime)
insert into @Table(MsgId,SendTime)
select Id,SendTime from SMS_Msgselect
top 1 MsgId as Id from @Table order by SendTime Desc

 

 

 

 

这样确实能得到返回的全球唯一码,担是如果是批量添加数据的话,第二张表里的全球唯一码就会重复(搞不懂为什么要用两张表)

我把存储过程修改为

 

INSERT INTO SMS_Msg
(Sender,
[Content],SendTime,[Type],ReceiverStr,Enterprise_ID)
VALUES
(
@sender,@content,@sendtime,@type,@receivers,0)
SELECT @@IDENTITY

 

发现无法获得返回的主键,最后上网查了下资料,改为如下的代码,OK了

 

代码
DECLARE @outputTable TABLE(ID uniqueidentifier)
INSERT INTO SMS_Msg (Sender,[Content],SendTime,[Type],ReceiverStr,Enterprise_ID)
OUTPUT INSERTED.ID
INTO @outputTable
VALUES
(
@sender,@content,@sendtime,@type,@receivers,0)
SELECT ID FROM @outputTable