全数据库的唯一字段, 是什么意思,值是唯一的话,使用GUID
如果字段的名字是唯一的话,这种,你可以创建Server触发器
就是一个 编号 字段 p_code,然后这个字段的值 要求必须唯一,插入和更新的时候 检验是否是已存在,用T-sql实现...
@专业人士: 加个唯一索引不就可以了么?
@专业人士: 使用GUID,保证整个Server都是唯一的
@Daniel Cai: 具体怎么加?不太懂这个啊~
@悦光阴: 不能使用guid,这个字段的值是前端可以输入的...
@专业人士: create unique nonclustered index (YOUR INDEX NAME) on (YOUR TABLE NAME) (YOUR TABLE FIELD NAME)
@Daniel Cai: 这个我还是不太理解,不懂T-SQL,现在是这样,数据库中添加 了字段 alter table p_project add p_code nvarchar(100);然后就是写 T-sql语句,需要在insert into和update 之前加个判断 ,就是判断 p_code,这个字段值 插入和更新时 不能与数据库中的值 重复,现在不知道怎么写T-Sql语句
@专业人士:
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时出现重复你代码会报错的。。。
@专业人士: sorry,公司有限制。剩下的应该也不多了,几个判断就写完了。
@Daniel Cai: 给看一下,这里哪还有错误,要把 名称和编号错误传出来...插入的我写了,更新的就不会了
@专业人士: 更新不是差不多的么?你前面判断完了如果没问题就可以往下去update了。
ps下,你前面那个select在并发的时候可能会出现死锁,因此我前面写的时候加了个updlock。
@Daniel Cai: 更新好像写的不对,要把错误结果返回回来的 (-1,-2)
@专业人士:
if exists (select 1 from tb with updlock where p_name=@pName and p_id<>@pid)
...
另一个同理。
@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]
@专业人士:
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: 大概明白了,我再看看,十分感谢,十分感谢~~~
全数据库什么意思?所有的表?