此查询在 ADO.net 上运行时MissingSchemaAction.AddWithKey
抛出异常:
无法启用约束。一行或多行包含违反非空、唯一或外键约束的值。
询问:
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
检查 locals 发现PersonId
添加了一个唯一的约束。不仅如此,在 SQL Server 管理器中运行相同的查询会返回一个没有任何警告或错误的结果集。此确切代码用于 SQL Server 2005。使用 SQL Server 2005,在 ADO.net 上运行此查询时,查询会正确创建复合约束。这是升级问题吗?
作为旁注,我知道设置EnforceConstraints = false
提供了一种解决方法。不过,理想情况下,我想从根本上解决这个问题。
设置重现:
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])
然后插入值:
INSERT INTO [GroupPersonMap]
SELECT 1, 1
UNION ALL
SELECT 2, 1
INSERT INTO [Person]
SELECT 1