我在SQL Server中有两个SP。 SP1在具有不同参数的循环中重复调用SP2,并将SP2的输出存储在临时表中。
由SP1重复调用的SP2有一些带有"未命名"的临时表。其中的主键。我知道临时表上的命名主键会导致问题,因为即使临时表本身被删除,有时它们也不会被删除。
在SP2中,一开始,我会检查并删除SP2中的任何临时表(如果存在)。
这似乎在SSMS中完全正常,但是当我在SSRS中使用SP1时,它会在SP2中因PK名称违规而多次抛出错误。
无法在对象#tempTable中插入重复键。
此问题是否有解决方法?
答案 0 :(得分:0)
不要在临时表上定义主键。主键约束强制唯一性。而是创建聚簇索引。您仍然可以获得查询的性能优势,但不会出现重复数据错误。
很可能会生成重复行,因此请注意输出中的重复数据。
解决了重复数据问题后,您可以恢复主键以确保将来在重复数据上引发错误,或将其保留为聚簇索引,并希望报告使用者注意到数据是否正在存在再次重复。