首页新闻找找看学习计划

sql server 如何设置全数据库唯一字段,并在插入和编辑的时候进行检验唯一性?

0
[已解决问题] 解决于 2017-03-27 15:30

sql server 如何设置全数据库唯一字段,并在插入和编辑的时候进行检验唯一性?

问题补充:

就是一个 编号 字段 p_code,然后这个字段的值 要求必须唯一,插入和更新的时候 检验是否是已存在,用T-sql实现..

蛮启的主页 蛮启 | 初学一级 | 园豆:180
提问于:2017-03-27 13:45
< >
分享
最佳答案
0

全数据库的唯一字段, 是什么意思,值是唯一的话,使用GUID

如果字段的名字是唯一的话,这种,你可以创建Server触发器

奖励园豆:5
悦光阴 | 老鸟四级 |园豆:2239 | 2017-03-27 14:58

就是一个 编号 字段 p_code,然后这个字段的值 要求必须唯一,插入和更新的时候 检验是否是已存在,用T-sql实现...

 

蛮启 | 园豆:180 (初学一级) | 2017-03-27 15:01

@专业人士: 加个唯一索引不就可以了么?

Daniel Cai | 园豆:10374 (专家六级) | 2017-03-27 15:06

@专业人士: 使用GUID,保证整个Server都是唯一的

悦光阴 | 园豆:2239 (老鸟四级) | 2017-03-27 15:07

@Daniel Cai: 具体怎么加?不太懂这个啊~

蛮启 | 园豆:180 (初学一级) | 2017-03-27 15:07

@悦光阴: 不能使用guid,这个字段的值是前端可以输入的...

蛮启 | 园豆:180 (初学一级) | 2017-03-27 15:08

@专业人士:  create unique nonclustered index (YOUR INDEX NAME) on (YOUR TABLE NAME) (YOUR TABLE FIELD NAME)

Daniel Cai | 园豆:10374 (专家六级) | 2017-03-27 15:10

@Daniel Cai: 这个我还是不太理解,不懂T-SQL,现在是这样,数据库中添加 了字段  alter table p_project add p_code nvarchar(100);然后就是写 T-sql语句,需要在insert into和update 之前加个判断 ,就是判断 p_code,这个字段值 插入和更新时 不能与数据库中的值 重复,现在不知道怎么写T-Sql语句

蛮启 | 园豆:180 (初学一级) | 2017-03-27 15:17

@专业人士: 

if exists (select 1 from tb with updlock where p_code=@p_code and @id is not null)

//insert or update here....

可能有语法错误,mssql好久没用了。

甚至你可以在加完那个索引后不用考虑是否重复,反正最后insert或者update时出现重复你代码会报错的。。。

Daniel Cai | 园豆:10374 (专家六级) | 2017-03-27 15:24

@专业人士: sorry,公司有限制。剩下的应该也不多了,几个判断就写完了。

Daniel Cai | 园豆:10374 (专家六级) | 2017-03-27 15:32

@Daniel Cai: 给看一下,这里哪还有错误,要把 名称和编号错误传出来...插入的我写了,更新的就不会了

蛮启 | 园豆:180 (初学一级) | 2017-03-27 15:46

@专业人士: 更新不是差不多的么?你前面判断完了如果没问题就可以往下去update了。

ps下,你前面那个select在并发的时候可能会出现死锁,因此我前面写的时候加了个updlock。

Daniel Cai | 园豆:10374 (专家六级) | 2017-03-27 16:27

@Daniel Cai: 更新好像写的不对,要把错误结果返回回来的 (-1,-2)

蛮启 | 园豆:180 (初学一级) | 2017-03-27 16:34

@专业人士: 

if exists (select 1 from tb with updlock where p_name=@pName and p_id<>@pid)

...

另一个同理。

Daniel Cai | 园豆:10374 (专家六级) | 2017-03-27 16:41

@Daniel Cai: 能不能完整的写一下更新的语句:

declare @tmpid as int
set @tmpid=0
select @tmpid=p_id from p_project where p_name=@PName or p_code=@PCode
if @tmpid>0 and @tmpid<>@PId
begin
select -1
end
else
begin
UPDATE [dbo].[p_project]

蛮启 | 园豆:180 (初学一级) | 2017-03-27 16:52

@专业人士: 

if exists (select 1 from tb with updlock where p_name=@pName and p_id<>@pid)

 begin

select -1

end

else if exists(select 1 from tb with updlock where p_code=@pcode and p_id<>@pid)

begin

select -2

end

else

begin

update tb set p_code=@pCode,p_name=@pName where p_id=@pid

select 0

end

Daniel Cai | 园豆:10374 (专家六级) | 2017-03-27 16:54

@Daniel Cai: 大概明白了,我再看看,十分感谢,十分感谢~~~

蛮启 | 园豆:180 (初学一级) | 2017-03-27 16:59
其他回答(1)
0

全数据库什么意思?所有的表?

Daniel Cai | 园豆:10374 (专家六级) | 2017-03-27 14:46
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册