Заменяет ли условную логику операторы CASE эффективен в Transact-SQL?

У меня есть хранимая процедура, которая делает что-то вроде:

IF @Param = '1'
    SELECT HT.HeaderKey, HT.Description,
           (SELECT SUM(E1) -- E1 is actually a complex expression
            FROM   DetailTable DT INNER JOIN ...
                                  INNER JOIN ...
                                  INNER JOIN ...
            WHERE  DT.HeaderKey = HT.HeaderKey)
    FROM   HeaderTable HT
ELSE IF @Param = '2'
    SELECT HT.HeaderKey, HT.Description,
           (SELECT SUM(E2) -- E2 is yet another complex expression
            FROM   DetailTable DT INNER JOIN ... -- Here, DetailTable is not
                                  INNER JOIN ... -- joined to the same tables
                                  INNER JOIN ... -- as in the first case
            WHERE  DT.HeaderKey = HT.HeaderKey)
    FROM   HeaderTable HT
-- Etc. There are five cases.

Я хотел бы, чтобы сократил запрос до следующего:

SELECT HT.HeaderKey, HT.Description,
       CASE @Param
         WHEN '1'
           (SELECT SUM(E1)
            FROM   DetailTable DT INNER JOIN ...
                                  INNER JOIN ...
                                  INNER JOIN ...
            WHERE  DT.HeaderKey = HT.HeaderKey)
         WHEN '2'
           (SELECT SUM(E2)
            FROM   DetailTable DT INNER JOIN ...
                                  INNER JOIN ...
                                  INNER JOIN ...
            WHERE  DT.HeaderKey = HT.HeaderKey)
         -- Etc.
         ELSE 0
       END
FROM   HeaderTable HT

Однако, Я нашел несколько положительных отзывов о Bullseye и могу бесплатно использовать инструмент покрытия кода MS. Цена на Bullseye не ...

Мне нужно выбрать инструмент покрытия кода между Bullseye и инструментом покрытия кода MS. Я нашел несколько положительных отзывов для Bullseye , и я могу использовать инструмент покрытия кода MS бесплатно . Цена на Bullseye не так велика (800 долларов за 1 копию для покупки и 100 долларов за 1 копию + 1 год на последующие годы), поэтому лицензирование некоторых копий Bullseye не составит проблемы.

Однако, если инструмент покрытия кода MS могу дать все, что дает Bullseye, мне (моей компании) не нужно тратить лишние деньги, и если Bullseye лучше инструментов MS с точки зрения простоты использования, интеграции инструментов или чего-то еще, я готов заплатить за Bullseye.

Мы будем использовать gtest для модульного тестирования, поэтому простота интеграции с gtest должна стать важным фактором для принятия решения. Мы также используем TFS (Team Foundation Server), поэтому интеграция с TFS может быть еще одним фактором.

Мы разрабатываем кросс-платформенный код, но для покрытия кода мы рассматриваем только среду Windows. Код реализован на C ++.

Как вы думаете? Можете ли вы поделиться своим опытом использования инструмента покрытия кода MS или Bullseye?

6
задан Daniel Mann 12 February 2016 в 00:19
поделиться