1

ストアドプロシージャGetSLAClassを使用して、以下に示すようにwhere句の単一の値を取得します。また、私はWRMaster(メインテーブル)の値をストアドプロシージャのパラメータとして使用したいと思います。解決策はありますか?私は正しいデータを得るためにこの両方の作業をしたいと思っています。サブクエリでストアドプロシージャを使用して、メインクエリデータをパラメータとして使用してwhere句の値を取得する方法

これはエラーMSG

メッセージ156、レベル15、状態1、行7
キーワード 'EXEC' 付近に不適切な構文です。

メッセージレベル102、レベル15、状態1、行7
'。'に近い構文が正しくありません。ここで

私のSQLクエリ(現在は動作していない)

SELECT 
    * 
FROM 
    WRMaster W 
WHERE 
    DATEDIFF(minute, W.AckedDateTime, W.ResolvedDateTime) <= 
     (SELECT Priority 
     FROM FMSLAClassPriorityMap 
     WHERE SLAClassKey = (EXEC dbo.GetSLAClass W.LocationKey, W.ServicCategoryKey, W.ProblemTypeKey, NULL, '')) 
WHERE WRKey=4 
+0

はいストアドプロシージャは、戻り値と入力と出力の両方を持つことができますパラメータを使用して、あなたが尋ねていることを正確に行うことができます –

+0

これが可能かどうかわかりませんが、そのようなタスクのための他のソリューションや方法はありますか? –

+0

はいストアドプロシージャを読むことをお勧めします。 –

答えて

1

これは、これを行うことができる方法である、

Declare 
@lk as int, 
@sck as int, 
@pt as int, 
@slaclass as int 

select @lk = LocationKey from WRMaster where WRKey=4 
select @sck = ServicecategoryKey from WRMaster where WRKey=4 
select @pt = ProblemKey from WRMaster where WRKey=4 

EXEC dbo.GetSLAClassOutput @lk,@sck,@pt,NULL,'', @slaclass output 

SELECT * 
FROM WRMaster W 
WHERE DATEDIFF(minute, W.AckedDateTime, W.ResolvedDateTime)<= 
(
    SELECT Priority 
    FROM FMSLAClassPriorityMap 
    WHERE SLAClassKey=(@slaclass) and PriorityKey = W.PriorityKey 
) 
where WRKey=4 
+1

SPを出力パラメータと共に使用する - https://docs.microsoft.com/en-us/sql/connect/jdbc/using-a-stored-procedure- with-output-parameters –

+0

特定のWRKey値に対してWRMaster内に1つの行しか存在しませんか?これが当てはまる場合、パフォーマンスは主にストアドプロシージャ内のものに依存します(呼び出しオーバーヘッドもありますが、この特定のケースでは無視されますが、加算されます)。 'select @lk = LocationKey、@sck = ServicecategoryKey、@pt = WRMasterからのProblemKey WRKey = 4'のように、最初の選択肢を1つにショートカットすることができます。とにかく、パフォーマンス上、インラインにするのが常にベストです。それに非常に近いのは、インラインテーブルUDFです。他のすべてはRBARベースで実行されます。 – dean

+0

@dean、quiresをありがとう、違う方法でこれを理解する方法があります、その私の間違い、この答えは私のシナリオのためにmachingです、私はWRKeyを渡しています。 –

関連する問題