代码重复与存在

时间:2011-08-24 21:21:03

标签: sql sql-server sql-server-2008

我注意到代码中的一些地方我正在维护存在和结果集中存在相同代码的位置。

IF EXISTS(SELECT a, b, c 
          FROM table
          WHERE d = 2)
    BEGIN
        SELECT a, b, c
        FROM TABLE
        WHERE d = 2
    END
ELSE
    BEGIN
        SELECT 'EMPTY'
    END

有没有一种很好的方法来重写上面所以选择不重复?

修改 谢谢你到目前为止的答案。共识似乎是应该修改消费应用程序,但不幸的是,我不控制这些应用程序。

至于答案声明这是危险的,因为选择或存在可以独立于另一个而完全修改我完全同意,这实际上是促使我提出这个问题的原因。

2 个答案:

答案 0 :(得分:2)

只需执行select,并修复应用程序,使其不检查RS(0) = 'empty' - 大多数应用程序语言都可以处理空结果集。这种查询非常浪费 - 从不介意潜在的危险(例如 - 有人编辑了EXISTS()部分,但忘记将更改复制到实际的SELECT,反之亦然。)

答案 1 :(得分:1)

不幸的是,我同意以前的海报,没有令人满意的好办法。

如果您的主要目标是消除重复的代码,您可以转到以下模式:

SELECT
  a,
  b,
  c
INTO #temp
FROM table
WHERE d = 2

IF @@ROWCOUNT = 0
BEGIN
  SELECT 'EMPTY'
END
ELSE
BEGIN
  SELECT * FROM #TEMP
END

DROP TABLE #TEMP;

当然,这个解决方案有自己潜在的一系列问题,而且我认为你可以更好地修改你的消费应用程序以完全消除这个问题。