【问题标题】:Repetitive calling of SP within another SP is causing duplicate PK name issues in temp table in the the called SP when used in SSRS在 SSRS 中使用时,在另一个 SP 中重复调用 SP 会导致被调用 SP 的临时表中出现重复的 PK 名称问题
【发布时间】:2017-03-03 22:43:11
【问题描述】:

我在 SQL Server 中有两个 SP。 SP1 在循环中使用不同的参数重复调用 SP2,并将 SP2 的输出保存在临时表中。

SP1 重复调用的 SP2 有一些临时表,其中包含“未命名”主键。

我知道临时表上的命名主键会导致问题,因为有时即使临时表本身被删除,它们也不会被删除。

在 SP2 中,一开始,我会检查并删除 SP2 中的任何临时表(如果存在)。

这似乎在 SSMS 中工作得很好,但是当我在 SSRS 中使用 SP1 时,有几次它会在 SP2 中引发错误,因为 PK 名称违规。

无法在对象#tempTable 中插入重复键。

这个问题有解决办法吗?

【问题讨论】:

  • 如果你想在临时表中插入重复值,那你为什么要将该列设置为PK?似乎这里的答案是在创建临时表时避免指定,但如果您能给出临时表的结构和循环代码的示例,将会很有帮助。

标签: sql-server stored-procedures reporting-services ssrs-2012 temp-tables


【解决方案1】:

不要在临时表上定义主键。主键约束强制执行唯一性。相反,创建一个聚集索引。您仍然可以获得查询的性能优势,但不会出现重复数据错误。

很可能会生成重复的行,因此请注意输出中的重复数据。

解决重复数据问题后,您可以恢复主键以确保将来在重复数据上引发错误,或者将其保留为聚集索引,并希望您的报告使用者注意到数据是否正在再次复制。

【讨论】:

  • 输出应该是唯一的,这就是我使用PK的原因。虽然由于某种原因在我的测试数据集中仍然可能存在重复数据,但如果有任何重复,那么这个 SP 也不应该在 SSMS 中正常运行。奇怪的是,只是在 SSRS 中,这个 SP 为在 SSMS 中运行良好的相同参数和相同的测试数据集抛出了这个错误。
  • 暂时移除主键,看看有哪些数据被复制了。这是确定您如何获得重复以及您需要做什么来解决它的第一步。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-21
  • 2011-12-11
  • 1970-01-01
  • 2017-05-08
  • 2022-08-16
  • 2017-06-25
相关资源
最近更新 更多