2017-10-02 3 views
0

データベースの使用量を少なくするため、これを最小限のテーブルクエリに保持しようとしています。私はMicrosoft SQL Server管理サーバーを使用しています。最初のクエリで結果が返されずに返された場合は、2番目のクエリを実行します。

ユーザーの現在の状況によっては、何も返さないクエリがあります。この最初のクエリが結果を返さない場合は、2番目のクエリを実行します。

これは関数の内部であり、1行の列データを返す必要があります。私は例のために名前が変更されたクエリを含めます。私はデータベースを頻繁にアクセスされないようにテンポラリテーブルを作成した後に独自の最適化を行います。私はこの作業を最初にする方法を理解する必要があります。私のような何かをしたいと思い理論的には

--QEURY1 
INSERT @tlbReturn (returnInfo1, returnInfo2) 
SELECT TOP(1) returnInfo1, returnInfo2 
FROM table1 AS t1a 
    INNER JOIN table1 AS t1b ON t1a.someData1 = t1b.someData1 
     AND t1a.someData2 = t1b.someData2 
     AND t1a.someData3 = t1b.someData3 
     AND t1a.someData4 = t1b.someData4 
    INNER JOIN table2 AS t2 ON t2.someData6 = t1b.someData7 
     AND t2.someData8 = t1b.someData9 
WHERE t1a.someData10 = 'value' 
    AND t1b.someData11 IN ('value1', 'value2') 
ORDER BY t1b.someDate DESC; 

--QUERY2 
INSERT @tlbReturn (returnInfo1, returnInfo2) 
SELECT TOP(1) returnInfo1, returnInfo2 
FROM table1 AS t1a 
    INNER JOIN table1 AS t1b ON t1a.someData1 = t1b.someData1 
     AND t1a.someData5 = t1b.someData5 
    INNER JOIN table2 AS t2 ON t2.someData6 = t1b.someData7 
     AND t2.someData8 = t1b.someData9 
WHERE t1a.someData10 = 'value' 
    AND t1b.someData11 IN ('value1', 'value2') 
ORDER BY t1b.someDate DESC; 

IF EXISTS(QUERY1) THEN RETURN 
ELSE RETURN QUERY2 

答えて

1

チェック最初のクエリの後、@@ ROWCOUNTの値。

1

最初の選択を行い、@@ ROWCOUNTをチェックし、0の場合は秒を選択します

関連する問題