SQL中如何在IF EXISTS判断中避免重复执行相同查询语句
SQL逻辑优化方案
你当前使用的是SQL Server语法,有两种常用方案可以避免重复编写、执行相同的聚合查询,同时可以修复你现有代码中疑似笔误的问题(两处GROUP BY的字段不一致,一个是value一个是data,属于输入错误):
方案1:无匹配结果时不创建空表
如果要求只有存在重复数据时才生成正式表,不需要空表占位,可先把查询结果写入临时表,再根据返回行数判断后续逻辑,原聚合查询仅执行1次:
-- 执行一次聚合查询,结果存入临时表 SELECT value, COUNT(*) AS Repetitions INTO #TempRepetitionStats FROM [table] GROUP BY value HAVING COUNT(*) > 1 -- 判断是否存在匹配结果 IF @@ROWCOUNT > 0 BEGIN -- 有结果则生成正式新表 SELECT * INTO dbo.newtable FROM #TempRepetitionStats -- 此处可添加原IF分支的其他逻辑 END ELSE BEGIN -- 此处可添加原ELSE分支的逻辑 END -- 清理临时表 DROP TABLE IF EXISTS #TempRepetitionStats
方案2:允许空表存在可直接简化为单语句
如果无匹配结果时也接受创建空的newtable,完全不需要加IF EXISTS判断,直接执行查询建表即可:
SELECT value, COUNT(*) AS Repetitions INTO dbo.newtable FROM [table] GROUP BY value HAVING COUNT(*) > 1 -- 执行后可通过@@ROWCOUNT判断写入行数,再执行后续分支逻辑
内容的提问来源于stack exchange,提问作者Redd0beard0
相关产品推荐
相关产品推荐

