3

いくつかの値を取得するために他の 2 つのストアド プロシージャを呼び出すストアド プロシージャがあります。

ALTER PROCEDURE [dbo].[Delivery_SelectByJobID] 
(
    @job_ID int
)
as
-- if possible - if count(pods) > 0 return true
-- and           if count(photos) > 0 return true
declare @podCount int = 0;
declare @photoCount int = 0;

EXEC @podCount=countPodsForJob @job_ID
EXEC @photoCount =countPhotosForJob @job_ID

declare @podsBit bit=0
declare @photosBit bit=0

if @podCount > 0
    begin
set @podsBit = 1
    end

if @photoCount > 0
    begin
    set @photosBit = 1
    end

SELECT     Job_Reference_No, Job_Start_Date, Job_POD_Filename, Job_Photo_Filename, 
Job_Signed_For_Name, Job_ID, Job_Status, Job_Delivery_Notes, @podsBit as Job_POD_Supplied, 
                      @photosBit as Job_Photo_Supplied
FROM         Jobs
WHERE     (Job_ID = @Job_ID) AND (Job_Status <> 7)

これを実行すると、Count_pods、Count_Photos、および選択の結果の 3 セットの結果が返されます。選択の結果のみを返したい。他の結果が返されないようにするにはどうすればよいですか?

4

3 に答える 3

1

これを解決しました。

countPodsForJob と countPhotosForJob を、結果セットではなく値を返す関数に変換する必要がありました。

于 2013-10-16T19:42:37.977 に答える
0

ストアド プロシージャcountPodsForJobcountPhotosForJob独自の結果セットを返します。特定のパラメーターが渡された場合に SELECTを実行しないように書き直すか、(より適切なオプション) 代替をスカラー UDF として作成することができます。

別の代替手段 (既存の SP を制御できず、新しい関数を作成できない場合) は、呼び出し元アプリで他の結果セットを無視するのが簡単です。(たとえば、ADO.NET DataSet では、3 番目の DataTable を簡単に取得できます)。

于 2013-10-16T19:35:26.087 に答える