首页 > 解决方案 > 如何在 SQL Server 中批量切换注释/取消注释某些行?

问题描述

有没有办法在 SSMS 中或通过第三方应用程序选择一批行来切换它们的评论状态?

背景:在我的查询中,我想在两种“搜索模式”之间交替。

为此,我需要注释行、、、、19和取消注释行。然后我需要做相反的事情才能回到另一个“模式”。107108112232

除了滚动查询,有什么方法可以自动化这个过程吗?

示例

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 行。

我现实生活中的例子分布在数百行中,并且将涉及评论取消评论作为同一“过渡”的一部分

标签: sql-serverssms

解决方案


一个简单的方法是使用一个变量:

--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

推荐阅读