Truy vấn này, khi chạy trên ADO.net với MissingSchemaAction.AddWithKey
ném ngoại lệ:ADO.net SQL Server 2012 - Query với phím composite và MissingSchemaAction.AddWithKey không đúng sẽ thêm khó khăn
Không thể kích hoạt tính năng hạn chế. Một hoặc nhiều hàng chứa các giá trị vi phạm ràng buộc không rỗng, duy nhất hoặc khóa ngoài.
Query:
SELECT map.GroupId, b.PersonId
FROM [GroupPersonMap] as map
INNER JOIN [Person] AS b ON b.PersonId = map.PersonId
GROUP BY map.GroupId, b.PersonId
Kiểm tra người dân địa phương cho thấy một hạn chế duy nhất cho PersonId
đã được thêm vào. Không chỉ vậy, nhưng chạy cùng một truy vấn trong SQL Server Manager trả về một tập kết quả mà không có bất kỳ cảnh báo hoặc lỗi nào. Mã chính xác này được sử dụng để làm việc trên SQL Server 2005. Sử dụng SQL Server 2005, khi chạy truy vấn này trên ADO.net truy vấn tạo ra một ràng buộc hỗn hợp đúng cách. Đây có phải là sự cố nâng cấp không?
Là một lưu ý phụ, tôi biết rằng cài đặt EnforceConstraints = false
cung cấp giải pháp thay thế. Lý tưởng nhất là, tôi muốn giải quyết vấn đề này ở gốc của nó.
Setup để tái sản xuất:
CREATE TABLE [GroupPersonMap]
(
[GroupId] [int] NOT NULL,
[PersonId] [int] NOT NULL
) ON [PRIMARY]
GO
ALTER TABLE [GroupPersonMap] ADD CONSTRAINT [PK_GroupPersonMAP] PRIMARY KEY CLUSTERED ([GroupId], [PersonId])
CREATE TABLE [Person]
(
[PersonId] [int] NOT NULL IDENTITY(1, 1),
[Val] INT
) ON [PRIMARY]
GO
ALTER TABLE [Person] ADD CONSTRAINT [PK_Person] PRIMARY KEY CLUSTERED ([PersonId])
giá trị Sau đó chèn:
INSERT INTO [GroupPersonMap]
SELECT 1, 1
UNION ALL
SELECT 2, 1
INSERT INTO [Person]
SELECT 1
Thông báo lỗi này xuất hiện ở điểm nào? Sau lần chèn thứ 2? – Codeman