1

ケースのアカウントを取得するためのストアド プロシージャに取り組んでいます。@accountsパラメータがの場合NULL、ケースのすべてのアカウントを取得します。@accountsの場合NOT NULL、アカウント ID のカンマ区切りの文字列になります。これを処理できる単一の where 句が必要です。ケースのすべてのアカウント@accountsNULL取得します。それ以外の場合は、@accountsパラメーターを使用して、指定されたアカウント ID を持つアカウントを取得します。2 つの異なる句IFで 2 回クエリを実行する必要があるような大きなステートメントは避けたいと思います。WHERE

DECLARE @caseId BIGINT,
    DECLARE @accounts VARCHAR(255)

    SELECT TOP 1 @userId = userId FROM TblTraceCur t
    WHERE caseId = @caseid
    ORDER BY processDate DESC

    SELECT    
              .... (select logic) ...
    WHERE     
              t.caseId = @caseID AND 
              t.userId = @userId AND
              t.shortStock = 0 AND
              ... (where I need the new logic) ...
    order by t.tracln ASC

どうもありがとう!

4

1 に答える 1

3

これは私にとってはうまくいきました。投稿で示した場所に追加(@accounts IS NULL OR @accounts LIKE ('%,' + CAST(t.caseId AS VARCHAR(255)) + ',%'))します。もちろん、これを機能させるには @accounts の最初の文字と最後の文字がコンマであることを確認する必要がありますが、それが最も簡単だと思います。たとえば、@accounts = 12 を指定すると、ID 1、2、および 12 が返されます。コンマを使用し、それらが最初と最後の文字であることを確認すると、これが発生しなくなります。

于 2012-07-25T22:52:44.747 に答える