关于一个并发的问题,谢谢了先

icewind4096 2007-03-22 10:11:24
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


谢谢了
...全文
241 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
toupapm 2007-03-22
  • 打赏
  • 举报
回复
呵呵,楼主有笔误?
TRANSACTION
icewind4096 2007-03-22
  • 打赏
  • 举报
回复
哪还有什么比较好的方法了么
baggio785 2007-03-22
  • 打赏
  • 举报
回复
就怕发生死锁或者阻塞哦~
rehearts 2007-03-22
  • 打赏
  • 举报
回复
Begin Translate ? Begin Transaction ?
icewind4096 2007-03-22
  • 打赏
  • 举报
回复
效率可以么,总觉得效率不高,为什么啊
jackeyabc 2007-03-22
  • 打赏
  • 举报
回复
我觉得这个好象应该是可以的;不过还有一个方法就是用触发器~~~


但是触发器估计没这个好~
中国风 2007-03-22
  • 打赏
  • 举报
回复
很好

34,873

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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