【问题标题】:Using .Net DataSet Designer and NVL()使用 .Net 数据集设计器和 NVL()
【发布时间】:2012-02-28 23:40:24
【问题描述】:

我第一次尝试使用带有连接和函数的查询在 VS2010 数据集设计器中创建数据集/表适配器; NVL()。通常我只使用单个数据库表,方法是将它们从服务器资源管理器拖到设计器工作区。 在这种情况下,我右键单击并添加了一个 TableAdapter 并输入了以下查询:

SELECT a.primary_key, NVL(a.message, b.subject) as subject
FROM TableA a, TableB b
WHERE a.primary_key = b.primary_key (+) 
AND (a.time_stamp BETWEEN :time_start AND :time_end);

DataTable 是使用适当的列创建的。问题是尝试在 TableAdapter 上执行查询时出现错误:

Failed to enable constraints. One or more rows contain values violating non-null, unique, or foreign-key constraints.

我在各个列的属性中没有发现任何异常。我错过了什么?

谢谢!

【问题讨论】:

  • FROM 子句被 gremlins 吃掉了……可以恢复吗?
  • 不是一个壮观的补充,但很好的收获。谢谢。不用担心,它在代码中,但我没有在这里提供。
  • 撇开“为什么”消息存储在主题之外,很可能在某个地方的消息中缺少主题,也就是说,如果加入是正确的。我提出了查询以检查我的答案,请告诉我们结果。

标签: .net visual-studio-2010 dataset dataset-designer


【解决方案1】:

很可能它是左外连接并且缺少 FROM 子句。

上次这些事情发生在我身上,当时没有为 b 返回任何行,但是太久以前了,我什至忘记了旧的连接语法......在查询分析器或 ssms 中运行查询并告诉我们:)

还有这个查询:

select count(1) from tableB where primary_key not in (select primary_key from tableA) 

【讨论】:

  • 这就是问题所在。显然,主表上的约束仍然存在,但次表允许插入重复值,并且键略有不同。感谢您帮助找到这个奇怪的地方。我可以投票反对糟糕的文档和缺乏对变更的监控吗? ;)
【解决方案2】:

请务必将 DataSet 级别上的属性 "EnforceConstraints" 设置为“false”。

【讨论】:

  • 感谢您的建议。我正在进一步调查,但我希望有一种不那么“蛮力”的方法。查询在所有其他上下文中运行良好,并且“预览”模式运行良好。我相信我已经满足了所有非空列、外键和唯一键,所以我不明白这个错误来自哪里。是由于 NVL() 函数还是其他原因?
猜你喜欢
  • 2011-03-20
  • 1970-01-01
  • 1970-01-01
  • 2016-08-05
  • 2014-03-14
  • 2010-12-11
  • 2021-06-28
  • 2011-02-12
  • 1970-01-01
相关资源
最近更新 更多