使用ASP.Net、C#和Sql Server实现夜间进程
我需要在我的应用程序计费模块中实现夜间流程的功能。请参见相关表格的图像。 让我用红色数字来解释表格。基本上,这是一个房屋分配应用程序数据库,租户可以在其中选择计费计划和插件。就像我们的移动服务一样 步骤:1。这是第一个most表,tbl_MSTBilling,最终用户将在其中创建一个带有一些插件的计划。插件在这里称为事务类型。这些计费计划的一般详细信息保存在此处的相同详细信息中,其中,作为插件,将参考计费计划(即计费计划id)保存在表2中。同样,在表1中,我们有两个实体BillingDayOfMonth为整数,LatefeeAppliedDayOfMonth为整数。输入值在1-31(月天数)之间 第2步:在达成协议时,承租人选择适合自己的计费计划,然后该计费计划将附在协议中。在表3中,我们有协议id和billingplanid。现在,我们同意生成来自表2的计费计划的附件,并将其插入表4。在这里,协议和计费计划有1:1的关系 Sterp3:现在夜间进程的场景出现了,每晚都会发生。首先,它将检查表3中的每月计费日,它将必须取出所有用户的协议id,这些用户的每月计费日与今天相同。现在,根据所有协议,表4中的行将填充到表5中。此处,每行的TransactionDate为空,Statementdate将成为当前日期。4的TransactionType与5的TransactionTypeId相同。假设我们得到了100行20个不同的AgreementId。同时,我们必须在表6中检查是否有基于IncludedInstant的协议到期票据,这是位字段。如果包含此项,则它将设置为true 步骤4:取表5和表7,将一行插入表7,表7将是原始票据 这就是我的全部疑问我在第3步被绊倒了,夜间流程从这里开始。我希望你明白我的意思。如有任何疑问,请填写 我当前的Sql脚本使用ASP.Net、C#和Sql Server实现夜间进程,c#,asp.net,sql-server,tsql,sql-server-2008,C#,Asp.net,Sql Server,Tsql,Sql Server 2008,我需要在我的应用程序计费模块中实现夜间流程的功能。请参见相关表格的图像。 让我用红色数字来解释表格。基本上,这是一个房屋分配应用程序数据库,租户可以在其中选择计费计划和插件。就像我们的移动服务一样 步骤:1。这是第一个most表,tbl_MSTBilling,最终用户将在其中创建一个带有一些插件的计划。插件在这里称为事务类型。这些计费计划的一般详细信息保存在此处的相同详细信息中,其中,作为插件,将参考计费计划(即计费计划id)保存在表2中。同样,在表1中,我们有两个实体BillingDayOf
BEGIN TRY
BEGIN TRANSACTION
DECLARE @Today AS INT
--
SET @Today =12-- (SELECT DATEPART(DAY,GETDATE()))
-- First of all check for the agreements
INSERT INTO tbl_AccountTranscation (AgreementID,TranscationDate,TranscationTypeID,Amount,StatementDate)
SELECT AgreementId, NULL, TransactionType,Amount,GETDATE() FROM tbl_AgreementTransaction
WHERE AgreementId IN (SELECT AgreementId From tbl_MSTAgreement WHERE BillingDayOfMonth = @Today)
Declare @Count AS INT
SET @Count = (Select COUNT(*) FROM tbl_BillDue WHERE IncludedinStatement=0 AND AgreementID IN (SELECT AgreementId
From tbl_MSTAgreement
WHERE BillingDayOfMonth = @Today) )
IF @Count >0
BEGIN
INSERT INTO tbl_AccountTranscation (AgreementID,TranscationDate,TranscationTypeID,Amount,StatementDate)
Select AgreementId,NULL,-1,ISNULL(((ISNULL(TotalDueAmount,0)+ ISNULL(LateFeeAmount,0)) - ISNULL(AdjustmentAmount,0)),0) as Amount,
GETDATE() as StatementDate
From tbl_BillDue
Where IncludedinStatement = 0 and AgreementID IN ( SELECT AgreementId
From tbl_MSTAgreement
WHERE BillingDayOfMonth = @Today
)
END
--INSERT INTO tbl_MSTBill
--(AgreementId,OutStandingPayment,BillDate,BillDueDate,PaymentDate,AmountPaid)
--SELECT AgreementID, SUM(Amount) as Amount,StatementDate,NULL,NULL,NULL
--FROM tbl_AccountTranscation WHERE AgreementId IN ( SELECT AgreementId
-- From tbl_MSTAgreement
-- WHERE BillingDayOfMonth = 12)
--GROUP BY AgreementID, Amount,StatementDate
SELECT tbl_MSTAgreement.AgreementID, tbl_MSTAgreement.LateFeeApplyDayOfMonth, tbl_AccountTranscation.StatementDate,
SUM(tbl_AccountTranscation.Amount) as Amount
FROM tbl_AccountTranscation INNER JOIN
tbl_MSTAgreement ON tbl_AccountTranscation.AgreementID = tbl_MSTAgreement.AgreementID
GROUP BY tbl_MSTAgreement.AgreementID,Amount,tbl_MSTAgreement.LateFeeApplyDayOfMonth, tbl_AccountTranscation.StatementDate
COMMIT TRANSACTION
END TRY
BEGIN CATCH
ROLLBACK TRANSACTION
END CATCH
END
如果日程安排对您来说比较困难,那么您可以使用SQL代理的日程安排作业在存储过程中完成夜间工作,也可以编写一个控制台应用程序,执行与Windows内置日程安排任务相同的操作 代码本身不应该太难浏览您的需求
祝你好运:)我不清楚你在问什么。看起来你想让我们为你写这整件事,但你肯定没想到。谢谢@tvan。。。我错过了。。夜间进程受阻。@amran-设置夜间任务或为夜间任务编写代码?我需要一个sql作业,该作业将每周一次执行此spmidnight@Richard,我正等着你呢。你肯定有一些解决方案。如果我把整个场景分解成多个查询而不是单个查询呢?这是一个好方法吗?我会在逻辑查询中分解它是的。易于编写和维护。