Sql Server存储过程查询记录再判断字段是否为空

案例一:


 alter procedure Pro_EmpIsNull
@PS_DD_ReportOID uniqueidentifier
--@out_Message nvarchar(128) output
as
begin	 
	begin
		  declare @ReportBeginTime datetime,--自述开始时间
		   @ReportEndTime datetime,--自述结束时间
		   @ResBeginTime datetime,--答辩开始时间
		   @ResEndTime datetime,--答辩结束时间
		   @ResEmpNo varchar(128),--答辩人工号
		   @QueType int,--提问人类型	

		   @EvaYear	varchar(128),--年度
		   @EvaBeginDate datetime,--开始时间
		   @EvaEndDate datetime,--结束时间
		   @Approvers varchar(128),--审批人
		   @EvaEmps varchar(128),--参评人员
		   @ReportName varchar(128),--报告名称
		   @ReportNo varchar(128),--报告编号
		   @EvaGrpNo varchar(128),--考核组
		   @Leaders varchar(128),--参加领导
		   @EvaEmpCount int,--考评组人数
		   @ActEvaEmpCount int,--实际考评人数
		   @AvgReportCostTime numeric(10,1),--人均自述时间(Min/人)
		   @AvgResCostTime numeric(10,1),--人均答辩时间(Min/人)
		   @GoodCount int,--好
		   @MidCount int,--中
		   @BadCount int--差
		   --督导报告主表
		  select @EvaYear=EvaYear,@EvaBeginDate=EvaBeginDate,@EvaEndDate=EvaEndDate,@Approvers=Approvers,@EvaEmps=EvaEmps, 
		  @ReportName=ReportName,@ReportNo=ReportNo ,@EvaGrpNo=EvaGrpNo ,@Leaders=Leaders,@EvaEmpCount=EvaEmpCount ,@ActEvaEmpCount=ActEvaEmpCount ,
		  @AvgReportCostTime=AvgReportCostTime ,@AvgResCostTime=AvgResCostTime ,@GoodCount=GoodCount ,@MidCount=MidCount ,@BadCount=BadCount
		  from PS_DD_Report Report where PS_DD_ReportOID=@PS_DD_ReportOID
			   if(@EvaYear = '')--年度是否为空
			   begin 
				   select '年度不能为空!'as Out_Message;
				   return;
			   end

			    if(@EvaBeginDate is null)--开始时间时间是否为空
			   begin 
				 select '开始时间不能为空!'as Out_Message;
				 return;
			   end

				 if(@EvaEndDate is null)--结束时间是否为空
			   begin 
				  select '结束时间不能为空!'as Out_Message;
				  return;
			   end

				 if(@Approvers = '')--审批人是否为空
			   begin 
				  select '审批人不能为空!'as Out_Message;
				  return;
			   end

				 if(@EvaEmps = '')--参评人员是否为空
			   begin 
				  select '参评人员不能为空!'as Out_Message;
				  return;
			   end

			    if(@ReportName = '')--报告名称是否为空
			   begin 
				  select '报告名称不能为空!'as Out_Message;
				  return;
			   end

			    if(@ReportNo = '')--报告编号是否为空
			   begin 
				  select '报告编号不能为空!'as Out_Message;
				  return;
			   end

			    if(@EvaGrpNo = '')--考核组是否为空
			   begin 
				  select '考核组不能为空!' as Out_Message;
				  return;
			   end

			    if(@Leaders = '')--参加领导是否为空
			   begin 
				  select '参加领导不能为空!' as Out_Message;
				  return;
			   end

			    if(@EvaEmpCount is null)--考评组人数是否为空
			   begin 
				  select '考评组人数不能为空!' as Out_Message;
				  return;
			   end

			    if(@ActEvaEmpCount is null)--实际考评人数是否为空
			   begin 
				  select '实际考评人数不能为空!'as Out_Message;
				  return;
			   end

			    if(@AvgReportCostTime is null)--人均自述时间(Min/人)是否为空
			   begin 
				  select '人均自述时间(Min/人)不能为空!' as Out_Message;
				  return;
			   end

			    if(@AvgResCostTime is null)--人均答辩时间(Min/人)是否为空
			   begin 
				  select '人均答辩时间(Min/人)不能为空!' as Out_Message;
				  return;
			   end

			    if(@GoodCount is null)--好是否为空
			   begin 
				  select '好不能为空!' as Out_Message;
				  return;
			   end

			   
			    if(@MidCount is null)--中是否为空
			   begin 
				  select '中不能为空!' as Out_Message;
				  return;
			   end

			   
			    if(@BadCount is null)--差是否为空
			   begin 
				 select '差不能为空!' as Out_Message;
				 return;
			   end

			--  答辩人员列表

			if not exists( select 1
				 from PS_DD_Report Report 
				join PS_DD_ResEmp ResEmp with(nolock) on Report.PS_DD_ReportOID=ResEmp.PS_DD_Report_FK
				where PS_DD_ReportOID=@PS_DD_ReportOID
			)
			begin
				select '该记录答辩人员列表时间填写不完善,请填写完善再提交!' as Out_Message;
				return;
			end

			if exists( select 1
				 from PS_DD_Report Report 
				join PS_DD_ResEmp ResEmp with(nolock) on Report.PS_DD_ReportOID=ResEmp.PS_DD_Report_FK
				where PS_DD_ReportOID=@PS_DD_ReportOID
				and (  ResEmp.ReportBeginTime is null
				 or	ResEmp.ReportEndTime is null
				 or ResEmp.ResBeginTime  is null
				or ResEmp.ResEndTime is null
					)
			)
			begin
				select '该记录答辩人员列表时间填写不完善,请填写完善再提交!' as Out_Message;
				return;
			end
			
			

			--  提问人员列表
			
			if not exists( select 1
				 from PS_DD_Report Report 
				 join  PS_DD_QueEmp  QueEmp with(nolock) on Report.PS_DD_ReportOID=QueEmp.PS_DD_Report_FK
				where PS_DD_ReportOID=@PS_DD_ReportOID
			)
			begin
				select '该记录提问人员列表填写不完善,请填写完善再提交!(提问人类型或答辩人工号不能为空)' as Out_Message;
				return;
			end

			if exists( select 1
				 from PS_DD_Report Report 
				 join  PS_DD_QueEmp  QueEmp with(nolock) on Report.PS_DD_ReportOID=QueEmp.PS_DD_Report_FK
				where PS_DD_ReportOID=@PS_DD_ReportOID
				and ( isnull(QueEmp.ResEmpNo,'')=''
					or isnull(QueEmp.QueType,'')=''
					)
			)
			begin
				select '该记录提问人员列表填写不完善,请填写完善再提交!(提问人类型或答辩人工号不能为空)' as Out_Message;
				return;
			end
			

			
	end

end

案例二:

Create procedure Pro_EmpIsNull
	 @PS_DD_ReportOID nvarChar(32) ----答辩人员表OID
 AS
 BEGIN   
  declare @ReportBeginTime varchar(128);--自述开始时间
  declare @ReportEndTime varchar(128);--自述结束时间
  declare @ResBeginTime varchar(128);--答辩开始时间
  declare @ResEndTime varchar(128);--答辩结束时间
  declare @ResEmpNo varchar(128);--答辩人工号
  declare @QueType varchar(128);--提问人类型	

  select @ReportBeginTime= ResEmp.ReportBeginTime,@ReportEndTime=ResEmp.ReportEndTime,@ResBeginTime=ResEmp.ResBeginTime,@ResEndTime=ResEmp.ResEndTime,@ResEmpNo=QueEmp.ResEmpNo,@QueType=QueEmp.QueType from PS_DD_Report Report 
join  PS_DD_QueEmp  QueEmp with(nolock) on Report.PS_DD_ReportOID=QueEmp.PS_DD_Report_FK
join PS_DD_ResEmp ResEmp with(nolock) on Report.PS_DD_ReportOID=ResEmp.PS_DD_Report_FK
where PS_DD_ReportOID=@PS_DD_ReportOID

   if(@ReportBeginTime = '' or @ReportEndTime = '' or  @ResBeginTime = '' or @ResEndTime = '' or @ResEmpNo = '' or @QueType = '')--自述开始时间是否为空
   begin 
    return '该记录资料填写不完善,请填写完善再提交!';
   end
 END

变量值函数:

ALTER FUNCTION [dbo].[GetOperatorUser]
(
	@BillNo  varchar(20)
	
)
RETURNS  varchar(200)
AS
BEGIN
	Declare @ChkUser varchar(200)
	 select @ChkUser=
  (
  select PS_DDCL_FlowNodeEmp.EmpNo+'_'+d.EmpName+',' from PS_DDCL_FlowNodeEmp  --PS_DDCL_FlowNodeEmp.EmpNo+'_'+d.EmpName+','=拼接起来 类似(XX_XX,)
  Left join PS_DDCL_FlowNode a on PS_DDCL_FlowNodeEmp.PS_DDCL_FlowNode_FK=a.PS_DDCL_FlowNodeOID 
  left join PS_DDCL_Flow b on b.PS_DDCL_FlowOID=a.PS_DDCL_Flow_FK
 left join PS_DDCL_DealWith c on b.BillNo=c.BillNo
 left join PS_BS_Employee d on d.EmpNo=PS_DDCL_FlowNodeEmp.EmpNo
 where c.BillNo=PS_DDCL_DealWith.BillNo and PS_DDCL_FlowNodeEmp.IsCompleted=0 and IsCurrentNode=1
  FOR XML PATH('')--相当于把查询出来的多条记录一条条值循(然后赋值到上面,然后追加到@ChkUser变量里类似vs中的+=运算符)
  )
 from PS_DDCL_DealWith 
where 
PS_DDCL_DealWith.BillNo=@BillNo

	RETURN  @ChkUser 

END

查询和根据虚拟字段条件删除

--下面两个同一样的查询效果
select * from dbo.PM_OrderFiles where OrderNo ='W121090747755' and ItemsNo = '020' order by OrderNo+ItemsNo
select *from dbo.PM_OrderFiles where OrderNo+right('000'+ItemsNo,3)='W121090747755020'


--根据虚拟字段作为条件删除
delete PlanInfo where PlanID in
(
	select PlanID from 
	(
		select p.PlanID,p.PlanNo+right('000'+p.ItemNo,3) as piNo,p.SaleCompanyNo,p.FactoryNo,p.TypeId,t.ClientCode,p.TechnologyCode,
			   (select count(c_partType) as cntPartID from FactoryParts f where c_fileif = '1' and f.PlanID = t.PlanID group by PlanID) as FactoryParts,p.CreateDTime,
			t.TransferStartDTime,t.TransferEndDTime,t.TransferStatus,t.TransferLog,t.ProcessStartDTime,t.ProcessEndDTime,
			t.ProcessStatus,t.ProcessLog,p.FeedbackSaleResult,p.FeedbackSaleDTime,p.FeedbackProducingResult,p.FeedbackProducingDTime--,p.filenameheader
		  from PlanInfo p,TaskQueue t
		 where 1=1 and p.PlanID = t.PlanID
		   and p.IsFeedbackProducing = 0
		   and t.DirectoryOrFile = 'Directory'
		   --order by CreateDTime asc
	) as tt
where tt.FactoryParts is null
)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值