联合主键更新问题

广州人 2011-08-01 05:33:37
我有一张表tSecurityPermissionEmployee,表中三个字段PermissionID,EmployeeID,ObjectID三个字段联合主键。


现在想把EmployeeID 为A的数据,将EmployeeID修改成B。

直接写
UPDATE tSecurityPermissionEmployee
SET EmployeeID = 'B'
WHERE EmployeeID = 'A'是不可以的。

违反了 PRIMARY KEY 约束 'PK_tSecurityPermissionEmployee'。不能在对象 'dbo.tSecurityPermissionEmployee' 中插入重复键。
语句已终止。

因为EmployeeID为A和B的数据中,PermissionID和objectID存在相同的情况,请问怎么写这个语句呢?
...全文
708 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
whishtking 2011-08-02
  • 打赏
  • 举报
回复
在加一字段。怎么保证其他的id字段不重复????
wyx100 2011-08-01
  • 打赏
  • 举报
回复

做了联合主键,就不要轻易去更新,如果更新后有相同的记录,那要看需求是怎么处理了,是删掉老的还是删掉新的,起码得有个参照的。
AcHerat 2011-08-01
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 qianjin036a 的回复:]
来作一个猜想:
假设如楼主所说要进行权限交接,那如果 PermissionID,EmployeeID,ObjectID 三个字段中,对于一组PermissionID,ObjectID,原先EmployeeID中含有A,但不含有B,那把A的权限交给B很简单,只要直接把EmployeeID改为B就行了.
不过,假设原先对某一PermissionID,ObjectID,它所对应的EmployeeID……
[/Quote]

就是啊!

转移的话楼主找B的权限在A中没有的,然后去更新,如果有那就删除A的就行了。

PermissionID,ObjectID,EmployeeID 这个中如果EmployeeID是A,转移到B,假设更新成功即EmployeeID更新为B了,那么重复的就是具有相同权限的,没有重复的就是给B转移过来多出的权限,那么楼主要做的就是判断下B是否有A这个权限,有了删除A的,没有将A的EmployeeID更新为B。
-晴天 2011-08-01
  • 打赏
  • 举报
回复
来作一个猜想:
假设如楼主所说要进行权限交接,那如果 PermissionID,EmployeeID,ObjectID 三个字段中,对于一组PermissionID,ObjectID,原先EmployeeID中含有A,但不含有B,那把A的权限交给B很简单,只要直接把EmployeeID改为B就行了.
不过,假设原先对某一PermissionID,ObjectID,它所对应的EmployeeID中既含有A,又同时含有B,那就是说A有权限,B也有同样的权限,那还要作什么权限转移呢,直接把A的那条删除不就行了!
快溜 2011-08-01
  • 打赏
  • 举报
回复
alter   table   tb   drop   constraint   主键名 
update ...
ALTER TABLE tb WITH NOCHECK ADD
CONSTRAINT [PK_表名] PRIMARY KEY NONCLUSTERED
(
[字段名1],
[字段名2]
)
广州人 2011-08-01
  • 打赏
  • 举报
回复
就是一个权限转移的思路,a用户离职了,B用户来接收A的工作,因此在系统上需要将A的权限转移至B用户上。
AcHerat 2011-08-01
  • 打赏
  • 举报
回复
为什么要去改联合主键呢?搞不懂。。。
广州人 2011-08-01
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 qianjin036a 的回复:]

这个可就没办法了.既然你定义了这三个列的组合是不能重复的,现在你对它修改会出现重复,那只有不改,或者改成其他不会产生重复的值.
[/Quote]

我现在就想该没重复的数据..

但是不会写啊...
AcHerat 2011-08-01
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 denghui_li 的回复:]

如果修改后会相同的这条记录要怎么处理 ?
[/Quote]

做了联合主键,就不要轻易去更新,如果更新后有相同的记录,那要看需求是怎么处理了,是删掉老的还是删掉新的,起码得有个参照的。
-晴天 2011-08-01
  • 打赏
  • 举报
回复
这个可就没办法了.既然你定义了这三个列的组合是不能重复的,现在你对它修改会出现重复,那只有不改,或者改成其他不会产生重复的值.
快溜 2011-08-01
  • 打赏
  • 举报
回复
tSecurityPermissionEmployee已经存在EmployeeID 为B的数据了?不能插入重复值
闹铃 2011-08-01
  • 打赏
  • 举报
回复
如果修改后会相同的这条记录要怎么处理 ?
AcHerat 2011-08-01
  • 打赏
  • 举报
回复
这样就不能应用联合主键了,把联合主键去掉。再去更新,有必要加个自增列去做主键吧!

22,206

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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