sql中如何加判断,让这个存储过程只执行一次

luckychap 2017-05-25 10:11:42

CREATE Proc [dbo].[OA_LeaseContract_Finance_Proce_Init]
@LTID int,
@LogName varchar(30)
as
Begin
declare @d1 datetime,@d2 datetime,@Term int,@PriceMonth numeric(18,2),@d3 int,@sysFinanceNumber bigint

select @sysFinanceNumber=a.Sys_FinanceNumber
,@d1=a.BeginDate,@d2=a.EndDate
,@Term=a.Pay_Cyc
,@d3=a.Ahead_Date
,@PriceMonth=a.Price
from OA_LeaseContract a
where LTID=@LTID;


declare @TB table
(
[id] [int] IDENTITY(1,1) NOT NULL,
HF_Date datetime,
BeginDate datetime,
EndDate datetime,
Pay_Price numeric(18,2),
Pay_Price2 numeric(18,2),
Get_Price2 numeric(18,2)
)

declare @dtmp datetime
set @dtmp=@d1
while @dtmp<=@d2
Begin
insert into @TB(BeginDate,EndDate,HF_Date)
values(@dtmp,dateadd(d,-1,DATEADD(m,@Term,@dtmp)),@dtmp-@d3)
set @dtmp=dateadd(m,@Term,@dtmp)
--insert into @TB(Awakeday)
--values(@dtmp-@d3)
--Select case when Advanceday > 0
--then Select id,DATEADD(day,-Advanceday,BeginDate) end from @TB
End

update @TB set Pay_Price=@PriceMonth*@Term
update @TB set EndDate=@d2 where EndDate>@d2
update @TB set Pay_Price2 = -@PriceMonth*2 where EndDate>@d2 or EndDate=@d2
update @TB set Pay_Price2 = @PriceMonth*2 where id = 1
update @TB set Pay_Price2 = 0 where BeginDate>@d1 and EndDate<@d2
--update @TB set HF_Date = null where id = 1
update @TB set Get_Price2 = -Pay_Price2
insert into OA_LeaseContract_Finance(Sys_FinanceNumber,LTID,HF_Date,BeginDate,EndDate
,Pay_Price,Pay_Price2,Get_Price2
,CreateUser)
select @sysFinanceNumber,Ltid=@LTID,HF_Date,BeginDate,EndDate
,Pay_Price,Pay_Price2,Get_Price2,@LogName
from @TB a
order by a.id

End

--select top 1 * from @TB order by BeginDate desc


GO

以上是存储过程代码,如何加判断让他只执行一次,现在是每执行一次,数据就写进去一次,如何修改?不太会sql求解答
...全文
283 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
0与1之间 2017-05-25
  • 打赏
  • 举报
回复
可以直接在表中加个更新字段,如果日期是当天则不更新
顺势而为1 2017-05-25
  • 打赏
  • 举报
回复
引用 4 楼 qq_38287011 的回复:
[quote=引用 2 楼 appetizing_fish1 的回复:] 加一个执行标记表: 字段: 执行日期, 执行标记
意思就是我建一个新表,然后设计两列,一列执行日期,一列执行id?然后在存储数据里加判断吗??[/quote] 是的, 在存储过程as下加代码 DECLARE @run_flag int Select @run_flag=run_flag From 执行标记表 where run_date=getdate() if @run_flag=0 今日未执行 Begin 你的代码 End
luckychap 2017-05-25
  • 打赏
  • 举报
回复
引用 2 楼 appetizing_fish1 的回复:
加一个执行标记表: 字段: 执行日期, 执行标记
意思就是我建一个新表,然后设计两列,一列执行日期,一列执行id?然后在存储数据里加判断吗??
luckychap 2017-05-25
  • 打赏
  • 举报
回复
引用 楼主 qq_38287011 的回复:
CREATE Proc [dbo].[OA_LeaseContract_Finance_Proce_Init] @LTID int, @LogName varchar(30) as Begin declare @d1 datetime,@d2 datetime,@Term int,@PriceMonth numeric(18,2),@d3 int,@sysFinanceNumber bigint select @sysFinanceNumber=a.Sys_FinanceNumber ,@d1=a.BeginDate,@d2=a.EndDate ,@Term=a.Pay_Cyc ,@d3=a.Ahead_Date ,@PriceMonth=a.Price from OA_LeaseContract a where LTID=@LTID; declare @TB table ( [id] [int] IDENTITY(1,1) NOT NULL, HF_Date datetime, BeginDate datetime, EndDate datetime, Pay_Price numeric(18,2), Pay_Price2 numeric(18,2), Get_Price2 numeric(18,2) ) declare @dtmp datetime set @dtmp=@d1 while @dtmp<=@d2 Begin insert into @TB(BeginDate,EndDate,HF_Date) values(@dtmp,dateadd(d,-1,DATEADD(m,@Term,@dtmp)),@dtmp-@d3) set @dtmp=dateadd(m,@Term,@dtmp) --insert into @TB(Awakeday) --values(@dtmp-@d3) --Select case when Advanceday > 0 --then Select id,DATEADD(day,-Advanceday,BeginDate) end from @TB End update @TB set Pay_Price=@PriceMonth*@Term update @TB set EndDate=@d2 where EndDate>@d2 update @TB set Pay_Price2 = -@PriceMonth*2 where EndDate>@d2 or EndDate=@d2 update @TB set Pay_Price2 = @PriceMonth*2 where id = 1 update @TB set Pay_Price2 = 0 where BeginDate>@d1 and EndDate<@d2 --update @TB set HF_Date = null where id = 1 update @TB set Get_Price2 = -Pay_Price2 insert into OA_LeaseContract_Finance(Sys_FinanceNumber,LTID,HF_Date,BeginDate,EndDate ,Pay_Price,Pay_Price2,Get_Price2 ,CreateUser) select @sysFinanceNumber,Ltid=@LTID,HF_Date,BeginDate,EndDate ,Pay_Price,Pay_Price2,Get_Price2,@LogName from @TB a order by a.id End --select top 1 * from @TB order by BeginDate desc GO 以上是存储过程代码,如何加判断让他只执行一次,现在是每执行一次,数据就写进去一次,如何修改?不太会sql求解答
有具体一些的代码写法吗?
顺势而为1 2017-05-25
  • 打赏
  • 举报
回复
加一个执行标记表: 字段: 执行日期, 执行标记
吉普赛的歌 2017-05-25
  • 打赏
  • 举报
回复
加一个日志表, 如果日志表里有update过的记录则不再处理。

22,302

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧