2013-10-16 31 views
3

我有一個存儲過程調用2其他存儲過程來獲取一些值。如何防止SQL Server返回3組結果?

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) 

當運行此它返回3組結果,即Count_pods,Count_Photos,和所述選擇的結果。 我只想返回選擇的結果。 如何停止正在返回的其他結果?

回答

0

您可以使用

SET NOCOUNT ON; ---- after the AS in your proc's Definition. 

它將停止發送消息12行(S)......

檢查其他存儲過程的定義藏漢和做同樣與他們.....

Infact我剛剛注意到,你的嵌套存儲過程和變量返回值@prodCount和@PhotoCount使他們輸出參數,這將存儲在它們的值通過參數,然後你可以通過他們OUT P給你SELECT語句的參數。

一旦你改變了嵌套特效的定義,你可以做這樣的事情..

ALTER PROCEDURE [dbo].[Delivery_SelectByJobID] 
    (
     @job_ID int 
    ) 
    as 
    SET NOCOUNT ON; 
    -- 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   --Your Code 
    --EXEC @photoCount =countPhotosForJob @job_ID  --Your Code 

    EXEC countPodsForJob @job_ID, @podCount OUTPUT   --My Suggestion 
    EXEC countPhotosForJob @job_ID, @photoCount OUTPUT  --My Suggestion 

    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) 
+0

這沒有什麼區別。 –

+0

在這個存儲過程的定義將只有一個結果集您需要檢查嵌套存儲過程的定義確保您使用OUTPUT參數,這將存儲在它們返回的值傳遞給存儲過程的參數,我也看不到任何out關鍵字與您傳遞給嵌套過程的參數。 –

0

存儲過程countPodsForJob和自己的countPhotosForJob返回結果集。如果傳遞了一個特定的參數或者(更好的選項)創建它們作爲標量UDF的選項,你可以重寫它們而不是執行SELECTs。

另一種選擇(如果您無法控制現有的SP並且無法創建新功能)很容易忽略調用者應用中的其他結果集。 (例如在ADO.NET DataSet中,您可以簡單地使用第三個DataTable)。

1

解決了這個問題。

我需要將countPodsForJob和countPhotosForJob轉換爲返回值而不是結果集的函數。

+0

所以你確實使用我的建議「*創建他們的替代品作爲標量UDF *」:-)? –