SQL Server-如何最有效地检查结果集中的重复项
我正在编写一个存储过程,它或多或少运行一个“SELECT…”。。。从…起表上的WHERE'语句我希望将查询结果返回给用户,但检查查询结果中是否有重复项。如果有,我想抛出一个错误。否则,应返回结果集 总结起来,代码应该是:SQL Server-如何最有效地检查结果集中的重复项,sql,sql-server,duplicates,Sql,Sql Server,Duplicates,我正在编写一个存储过程,它或多或少运行一个“SELECT…”。。。从…起表上的WHERE'语句我希望将查询结果返回给用户,但检查查询结果中是否有重复项。如果有,我想抛出一个错误。否则,应返回结果集 总结起来,代码应该是: 从表中选择 检查SELECT查询结果中是否存在重复项,如果发现任何错误,则抛出错误 如果没有找到,则返回结果集 我目前的想法是,我需要做如下事情: 在相关列上创建具有唯一约束的表变量 从“选择…”插入到表变量中。。。从…起在哪里 如果存在重复项,约束将被违反,我将在catch子
这取决于需要处理的数据量。结果集有多大?有多少列需要是唯一的?根据你所说的,我看不到更好的方法,尽管最好的解决方案是。编写查询并测试它,检查它是否按预期工作,检查它的运行速度。然后,如果它的运行速度没有您想要的那么快,那么您可以尝试其他方法,看看它们是否更快。根据您提供的信息,这将提供比其他任何人都能提供的更多的洞察力。正如Gareth所说,这不是一个坏主意,只是如果您正在使用事务,并且在检查重复之前有一些操作,则引发错误必须处理回滚事务,因此,有时它会花费很多钱,最好在进入事务之前验证数据。@GordonLinoff-结果集可能会达到数百万行,但不太可能超过数百万行。要唯一的列数实际上不是静态的-可以是1到7,或者您可以使用具有唯一约束的临时表,而不是表变量。因为表变量不是最有效的。这取决于你必须处理的数据量。结果集有多大?有多少列需要是唯一的?根据你所说的,我看不到更好的方法,尽管最好的解决方案是。编写查询并测试它,检查它是否按预期工作,检查它的运行速度。然后,如果它的运行速度没有您想要的那么快,那么您可以尝试其他方法,看看它们是否更快。根据您提供的信息,这将提供比其他任何人都能提供的更多的洞察力。正如Gareth所说,这不是一个坏主意,只是如果您正在使用事务,并且在检查重复之前有一些操作,则引发错误必须处理回滚事务,因此,有时它会花费很多钱,最好在进入事务之前验证数据。@GordonLinoff-结果集可能会达到数百万行,但不太可能超过数百万行。要唯一的列数实际上不是静态的-可以是1到7,或者您可以使用具有唯一约束的临时表,而不是表变量。因为表变量不是最有效的。