【发布时间】:2013-07-30 20:59:40
【问题描述】:
此查询在 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
检查本地变量显示已添加了 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
【问题讨论】:
-
这个错误信息在什么时候出现?在第二次插入之后?
标签: tsql ado.net sql-server-2012