0

我在 SQL Server 中进行大规模更新时遇到了一些挑战。我有一个带有复合主键(学生ID、登录名、密码)的表。他们在一个组中具有共同的登录名和密码。我正在做一个(同样的登录并通过)更新并设置他们的登录并传递给字段类组=x的新值。但是我得到一个重复的主键违规错误。知道为什么吗?谢谢

4

2 回答 2

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).

于 2012-12-23T19:20:17.657 回答
0

很明显存在冲突,您正在创建表中已经存在的学生 ID/登录名/密码组合。此查询应向您显示与您提议的更改发生冲突的现有行在哪里:

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'
于 2012-12-23T19:40:03.283 回答