执行更新时的主键约束错误

时间:2012-12-23 19:13:33

标签: sql sql-server-2008

我在SQL服务器中进行批量更新时遇到了一些挑战。我有一个复合主键表(studentid,login,pass)。他们有一个共同的登录名和密码,因为他们在一个组中。我正在做一个(同样是所有相同的登录和传递)更新并设置他们的登录并传递给新的值,其中字段,类组= x.But我得到重复的主键违规错误。知道为什么吗? 感谢

2 个答案:

答案 0 :(得分:1)

鉴于你有一个奇怪的主键,很容易看出它是如何被违反的。例如,假设学生1在表格中有两行:

studentid  login     pass                group
1          bobama    reallyborninkenia   politician
1          bobama2   raisetaxes          politician

并说您更新了论坛politician

update  StudentTable
set     login = 'bobama'
,       pass = 'justpwndromney'
where   [group] = 'politician'

然后您会遇到主键违规,因为会有两行具有相同的(studentid, login, pass)组合。

如果这很奇怪,那是因为你的主键很奇怪。我希望主键只是(studentid)

答案 1 :(得分:0)

很明显存在冲突,你正在创建一个已存在于表中的studentid / login / password组合。此查询应显示与建议的更改冲突的现有行的位置:

select t.* from [your-table] t
join (select * from [your-table] where [class-group] = x) proposed-change
on proposed-change.[studentid] = [t.studentid]
where t.login = 'proposed-login' and t.password = 'proposed-password'