Как пакетно переключить комментарий / раскомментировать определенные строки в SQL Server? - PullRequest
0 голосов
/ 05 ноября 2018

Есть ли способ, в SSMS или через стороннее приложение, выбрать пакет строк, чтобы переключить их закомментированное состояние?

Фон : в моем запросе есть два «режима поиска», между которыми я хочу переключиться.

Для этого мне нужно закомментировать строки 19, 107, 108, 112 и раскомментировать строку 232. Затем мне нужно сделать обратное, чтобы вернуться к другому «режиму».

Вместо того, чтобы прокручивать запрос, есть ли способ автоматизировать этот процесс?

Пример

1  --select distinct x.name from (
2  select name, dateofbirth, favouritecolour
3  from classmates
4  where dateofbirth between '01-Mar-1990' and '17-Apr-1995'
5  --)x
6  union all
7  --select distinct x.name from (
8  select name, relationship, location
9  from family
10 where relationship = 'uncle'
11 --)x

Для более подробной информации, я мог бы получить такой запрос. Если бы я просто хотел имена, я бы раскомментировал строки 1,5,7 и 11.

Мой пример из реальной жизни разбросан по сотням строк и будет включать комментирование и , не комментируя как часть того же самого "перехода"

1 Ответ

0 голосов
/ 05 ноября 2018

Простой способ сделать это - использовать переменную:

--Searchmode 0 = Path A
--Searchmode 1 = Path B
DECLARE @SearchMode int = 0 --Change this to change path

IF @SearchMode = 0
BEGIN
   SELECT blah
   FROM tableA
END

IF @SearchMode = 1
BEGIN
   SELECT blah
   FROM tableB
END

Вы также можете сделать это процедурой:

CREATE PROCEDURE dbo.exampleProc @SearchMode int
AS
BEGIN

IF @SearchMode = 0
BEGIN
   SELECT blah
   FROM tableA
END

IF @SearchMode = 1
BEGIN
   SELECT blah
   FROM tableB
END

END  

Затем просто выполните его и введите значение параметра следующим образом:

EXEC dbo.exampleProc 0
EXEC dbo.exampleProc 1

Редактировать :

Вы также можете запускать повторяющиеся части запроса, тогда дополнительные фильтры будут запускаться, только если @SearchMode = 1. Что-то вроде:

DECLARE @SearchMode int = 0

select name, dateofbirth, favouritecolour
into #temp
from classmates
where dateofbirth between '01-Mar-1990' and '17-Apr-1995'
union all
select name, relationship, location
from family
where relationship = 'uncle'

IF @SearchMode = 0
BEGIN
    SELECT *
    FROM #temp
END

IF @SearchMode = 1
BEGIN
    SELECT DISTINCT Name
    FROM #temp
END
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...