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 に答える