我有一个存储过程,它调用其他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)
当我运行它时,它返回3组结果,即Count_pods,Count_Photos和select的结果。 我只想返回select的结果。 如何停止返回其他结果?
答案 0 :(得分:1)
解决了这个问题。
我需要将countPodsForJob和countPhotosForJob转换为返回值而不是结果集的函数。
答案 1 :(得分:0)
您可以使用
SET NOCOUNT ON; ---- after the AS in your proc's Definition.
它将停止发送消息为12行......
检查其他存储过程的定义,并对它们执行相同的操作.....
事实上,我刚刚注意到你的嵌套存储过程和变量@prodCount和@PhotoCount的返回值使它们 OUTPUT参数,这将存储它们传递参数的值,然后你可以传递它们OUT参数给你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)
答案 2 :(得分:0)
您的存储过程countPodsForJob
和countPhotosForJob
会返回自己的结果集。如果传递了特定参数,或者(更好的选择)将其替代方法创建为标量UDF,您可以重写它们不执行SELECT。
另一种替代方法(如果您无法控制现有SP并且无法创建新功能)很容易忽略调用者应用程序中的其他结果集。 (例如,在ADO.NET DataSet中,您可以简单地获取第3个DataTable)。