0

我正在尝试在我的查询上添加功能以选择将在特定条件下执行的查询。

DECLARE @Test VARCHAR(50)
    SET @Test = 'A'

;WITH A AS (
  Select 'A is Selected' as SELECTED),
      B AS (
  Select 'B is Selected' as SELECTED)

IF(@Test = 'A')
  select * from A

IF(@Test <> 'A')
  select * from B

根据我上面的示例测试代码,我得到:

消息 319,级别 15,状态 1,第 5 行
关键字“with”附近的语法不正确。如果此语句是公用表表达式或 xmlnamespaces 子句,则前面的语句必须以分号结束。

消息 102,级别 15,状态 1,第 8 行
',' 附近的语法不正确。

也许我错过了什么?

4

2 回答 2

4

来自WITH common_table_expression (Transact-SQL)

在单个 SELECT、INSERT、UPDATE 或 DELETE 语句的执行范围内定义。

我猜你想要这样的东西。

declare @Test varchar(50);
set @Test='A';

with A as
(
  select 'A is Selected' as SELECTED
),
B as
(
  select 'B is Selected' as SELECTED
)
select *
from A
where @Test = 'A'    
union all
select *
from B
where @Test = 'B';
于 2012-03-29T05:41:12.220 回答
1

在我看来,您应该简单地将两个查询放在 IF 语句中,如下所示:

IF (@Test = 'A')
  select * from A
ELSE
  select * from B
于 2012-03-29T03:31:59.797 回答