日期:2014-05-19  浏览次数:20568 次

关于一个并发的问题,谢谢了先
CREATE   TABLE   [dbo].[Test]   (
[ID]   [bigint]   IDENTITY   (1,   1)   NOT   NULL   ,
[NAME]   [char]   (100)   NOT   NULL  
[ADDRESS]   [char]   (100)   NOT   NULL  
)   ON   [PRIMARY]

表中数据如下
ID NAME ADDRESS
1 IBM IBM_ADDR
2 SONY SONY_ADDR
3 Dell DELL_ADDR
4 HP HP_ADDR

NAME字段为不可重复

我希望,当插入新数据时,先查看插入的NAME是否有重复,如果已存在,则用新资料修改以存在记录,否则,插入新数据
我用事务实现了,但是不知道这样做是不是最好,是不是还有漏洞,是不是效率追高

该数据表的并发程度比较高

CREATE   PROCEDURE   INSERTCLIENT   (@NAME CHAR(100)
              @ADDRESS   CHAR(100))

As

Begin   Translate

if   Exists(Select   ID   From   TEST   WHERE   NAME   =   @NAME)
Update   TEST
SET   ADDRESS   =   @ADDRESS
WHERE   NAME   =   @NAME
ELSE
INSERT   INTO   TEST   (NAME,   ADDRESS)   VALUES   (@NAME,   @ADDRESS)

IF   @@ERROR   <>   0
BEGIN
Rollback   Translate
RETURN   -1
END
Else   BEGIN
Commit   Translate
RETURN   0
END


谢谢了

------解决方案--------------------
很好
------解决方案--------------------
我觉得这个好象应该是可以的;不过还有一个方法就是用触发器~~~


但是触发器估计没这个好~

------解决方案--------------------
Begin Translate ? Begin Transaction ?
------解决方案--------------------
就怕发生死锁或者阻塞哦~
------解决方案--------------------
呵呵,楼主有笔误?
TRANSACTION