关于一个并发的问题,谢谢了先
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