2011-08-21 15 views
0

3つのクエリがあります。最初のものは空のセットを返す場合、私は2番目のクエリを実行し、それはあまりにも空のセットを返す場合、私は、サーバーへの最後のチャンスを与え、第三の操作を行います。SQL Server:EXISTS(SELECT INTO)

SELECT ... INTO #Query1 
IF EXISTS(SELECT * FROM #Query1) 
    SELECT * FROM #Query1 
ELSE BEGIN 
    SELECT ... INTO #Query2 
IF EXISTS(SELECT * FROM #Query2) 
    SELECT * FROM #Query2 
ELSE BEGIN 
    SELECT ... 
    END 
END 

それがうまく働いたが、私はしました新しいタスクに直面した場合、クエリはサブクエリとして他のクエリと同様にIF EXISTS([subquery])の範囲内で使用する必要があります。これを行うと、私は参照してください

キーワード 'INTO'の近くに構文が正しくありません。

この新しい条件を満たすために元のクエリを変更する方法を教えてください。

よろしく、

+0

@@ ROWCOUNTを使用すると、前のSELECT文がどの行にも影響を与えるかどうかを確認できます。あなたは少し質問を明確にすることができますか?異なる一時テーブルにデータを配置したいが、サブクエリで何かを使用したいのですか?あなたの将来のテーブルを返すユーザ定義の関数があるかもしれません。 – HABO

+0

あなたは何をしているのかを説明することができましたが、代わりにやりたいことははっきりしていません。あなたがそれについて精緻化でき、構文エラーを与えるクエリを表示してください。 –

+0

To user92546:@@ ROWCOUNTは役に立ちません。なぜなら、私は次のクエリを実行できないからです。 IF EXISTS(テーブル1からのSELECT 1 IF @@ rowcount = 0 SELECT 2)SELECT 3 – noober

答えて

1

あなたはこのような何かを探しています:

create function dbo.Foo() 
    returns @Result table (ThingId Int, Source Int) 
as 
begin 
    insert into @Result 
    select ThingId, 1 as Source from Things1 
    if @@ROWCOUNT = 0 
    insert into @Result 
     select ThingId, 2 as Source from Things2 
    if @@ROWCOUNT = 0 
    insert into @Result 
     select ThingId, 3 as Source from Things3 
    --... 
    return 
end 
go 
select * from dbo.Foo() 
select 42 as 'The Answer' where exists (select * from dbo.Foo() where Source > 9) 

あなたはWHERE句などをする際に使用する関数にパラメータを渡すことができます。データの出所を気にしない場合は、「ソース」列を省略することができます。