3

SQLServerの操作。ストアドプロシージャの作成。これが私が達成したいことの擬似コードです:

    IF EXISTS ( SELECT  field1
                FROM    t1
                WHERE   field1 = ... AND field2 = ...) 
        BEGIN
            SELECT  field1
                FROM    t1
                WHERE   field1 = ... AND field2 = ...
        END

これを行うためのより良い方法はありますか?助けていただければ幸いです。

ちらゆ

更新:問題は、同じクエリが2回実行されることです。また、クエリを1回実行して、nullを返すこともできません(結果がnullの場合は、別の結果を返したいと思います)。

4

4 に答える 4

4

CTE とテーブル変数を使用する前にこれを行いました。より多くのコード行が必要ですが、クエリは 1 回しか記述されないため、ロジックは 1 つの場所に存在します。

DECLARE @Results TABLE (Result INT);
WITH ResultsCTE AS
(
    --Your query goes here 
    SELECT  1 as Result 
    WHERE 1 = 1
)
INSERT INTO @Results
SELECT Result
FROM ResultsCTE

IF (SELECT COUNT(*) FROM @Results) > 0
BEGIN
    SELECT * FROM @Results
END
ELSE BEGIN
    SELECT 'Do Something Else or Do Nothing!'
END
于 2012-09-19T15:47:51.903 に答える
3

クエリを 1 回実行した後に @@ROWCOUNT をチェックして、値を返すかどうかを判断できます。

http://msdn.microsoft.com/en-us/library/ms187316.aspx

于 2011-08-22T17:27:09.507 に答える
2

選択で結果が得られない場合、結果は返されません。何かが欠けていない限り、ここで条件を使用する理由はわかりません...

于 2011-08-22T17:28:01.850 に答える
2

結果を返す場合と返さない場合があるストアド プロシージャは、API から使用するのは悪夢です。SqlCommand.ExecuteReaderクライアント側 API には、結果セットを返す ( ) か結果セットを返さない ( ) かによって、異なるエントリ ポイントがありますSqlCommand.ExecuteNonQuery。アプリケーションがどの API を使用するかを事前に知ることは不可能です。モデリング ツールはSET FMTONLYオプションを使用して、返された結果セットのメタデータを分析します。返された結果セットの形状がランダムに変化し始めると、モデリング ツールは非常に混乱します。言い換えれば、あなたは間違った道を進んでいます。立ち止まって振り返ってください。

クエリを実行するだけで、条件に一致する行がない場合は、単に空の結果セットが返されます。これは、すべてのクライアント API およびモデリング ツールが手順に期待するものとまったく同じです。

于 2011-08-22T18:08:43.307 に答える