如果时间超过x,可以从脚本中结束查询吗?

时间:2015-09-04 17:50:46

标签: sql sql-server

因此,我们有一个架构,其中包含系统中使用的各种报表查询的视图名称和列。其中一些观点非常陈旧,写得不是很好,但仍然可以完成工作(如果很慢)。

无论如何,我正在编写一个脚本,它使用动态sql来确定报告中每列的不同值的数量。此脚本的每个视图的每个列循环的关键部分如下:

RelativeLayout relativeLayout = new RelativeLayout(this);
//You can put the background in another color to check were is the layout
//relativeLayout.setBackgroundResource(android.R.color.black);

RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(240, 320);
relativeLayout.setLayoutParams(lp);

setContentView(relativeLayout);

这很好用。但是,正如我之前提到的,这些视图中的一些写得很差,并且一些旧模式可能使用更好的索引,因此从列中检索不同的值需要很长时间,有时需要几个小时或者甚至几天。

由于这个原因,执行此操作的效率大大降低,因为每个报告都需要几个月才能完成。问题是,我们并不关心实际的不同价值数量,但实际上只知道是否还有100个不同的价值。

所以我的问题是,有一些方法可以在一旦不同值的数量超过100并且只返回100时停止查询,和/或只是取消sp_executesql调用,然后继续其余的脚本(如果& #39;花费的时间超过5分钟?

1 个答案:

答案 0 :(得分:1)

在处理数据之前,实际上没有办法做你想要的。只关注查询,你可以这样做:

SELECT @val = COUNT(*)
FROM (SELECT TOP 100 @curColumnNameFROM
      FROM @curViewName 
      GROUP BY @curColumnName
     ) t

这不太可能对性能产生重大影响。

有时在这些情况下,你可以这样做:

SELECT @val = COUNT(DISTINCT @curColumnName)
FROM (SELECT TOP 10000 @curColumnNameFROM
      FROM @curViewName 
      GROUP BY @curColumnName
     ) t

这可以减少数据的大小,这可能足以用于某些目的。