我试图运行以下代码:
UPDATE Personnel
SET TrID = (SELECT tp.personID FROM [*******].dbo.tblPerson tp WHERE tp.PersonnelID = PersonnelId)
当我运行它时,我收到错误:
Msg 512,Level 16,State 1,Line 3 Subquery返回的值超过1 值。当子查询遵循=,!=,<,< =,
时,不允许这样做,> =或当子查询用作表达式时。声明已经终止。
然而,当我运行以下
时SELECT COUNT(tp.personID)
FROM [*******].dbo.tblPerson tp
WHERE tp.PersonnelID = PersonnelId
GROUP BY tp.PersonID
HAVING COUNT(tp.personID) > 1
我得到0结果所以我很困惑为什么我得到这个错误。
提前致谢
答案 0 :(得分:0)
运行:
class ViewController: UIViewController {
@IBOutlet weak var tableView: UITableView!
@IBOutlet weak var addBarButtonItem: UIBarButtonItem!
var managedObjectContext: NSManagedObjectContext!
let disposeBag = DisposeBag()
override func viewDidLoad() {
super.viewDidLoad()
bindUI()
configureTableView()
}
func bindUI() {
addBarButtonItem.rx.tap
.map { _ in
Event(id: "1", date: Date(timeIntervalSince1970: 0))
/* Change Date(timeIntervalSince1970: 1) */
}.subscribe(onNext: { [weak self] (event) in
_ = try? self?.managedObjectContext.rx.update(event)
})
.addDisposableTo(disposeBag)
}
func configureTableView() {
tableView.isEditing = true
let animatedDataSource = RxTableViewSectionedAnimatedDataSource<AnimatableSectionModel<String, Event>>()
animatedDataSource.configureCell = { dateSource, tableView, indexPath, event in
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath)
cell.textLabel?.text = "\(event.date)"
print("\(event.date)")
return cell
}
managedObjectContext.rx.entities(Event.self, sortDescriptors:[NSSortDescriptor(key: "date", ascending: false)])
.map { events in
[AnimatableSectionModel(model: "Section 1", items: events)]
}
.bindTo(tableView.rx.items(dataSource: animatedDataSource))
.addDisposableTo(disposeBag)
}
}
要解决您的问题,您需要选择其中一个值。一种方法使用SELECT PersonnelID, COUNT(*)
FROM [*******].dbo.tblPerson tp
GROUP BY PersonnelID
HAVING COUNT(*) > 1;
。我建议你也加一个SELECT TOP 1
。
编辑:
问题似乎是你的语法。使用相关子查询时,始终限定所有列名以避免错误:
ORDER BY
你有:
UPDATE Personnel
SET TrID = (SELECT tp.personID
FROM [*******].dbo.tblPerson tp
WHERE tp.PersonnelID = Personnel.PersonnelId
);
SQL的作用域规则将其评估为:
WHERE tp.PersonnelID = PersonnelId
每个非 WHERE tp.PersonnelID = tp.PersonnelId
NULL
匹配 - 因此多行错误。