首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Server 2008 R2中的触发代码或日期格式错误

Server 2008 R2中的触发代码或日期格式错误
EN

Stack Overflow用户
提问于 2012-10-03 04:15:51
回答 1查看 1.2K关注 0票数 0

在用户完成验证(数据中的某种用户密钥)之后,我使用了一个捕获软件Abbyy FlexiCapture。它将将捕获的数据导出到Server 2008 R2中

一旦Server确定有插入的数据(新行),它将根据业务规则将代码触发到update表Abbyy。

该表有两个列,名为ProcessingDateDateOfService

我的业务规则要求是

  1. 如果处理日期晚于服务7个月的日期,它将更新表Abbyy
    • CouponStatus与"Reject",
    • RejectCode与"A5“。

  1. 如果处理日期早于ServiceDate 7个月的日期,则将更新表Abbyy
    • CouponStatus与“批准”,
    • 带有"null“的列RejectCode

我面临一个错误,因为一些插入的数据与处理日期超过了服务日期7个月,列CouponStatus变成了“审批”。

我不确定是触发代码问题还是日期格式问题。当用户进行验证时,日期格式为dd/mm/yy

在Server 2008 R2中,我的ProcessingDateDateOfService列的数据类型是带有格式yyyy-mm-dddate

以下是我的触发代码,请从第86行开始

代码语言:javascript
运行
复制
USE [master]
GO
/****** Object:  Trigger [dbo].[BusinessRule]    Script Date: 10/03/2012 11:28:05 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================

ALTER TRIGGER [dbo].[BusinessRule]
ON [dbo].[Abbyy]
AFTER INSERT
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;


DECLARE @Identity varchar(225);
DECLARE @RegNo varchar(225);
DECLARE @ProDate date;
DECLARE @SerDate date;
DECLARE @PriKey varchar(255);

SELECT @Identity=EngineNo, @RegNo=VehRegNo, @ProDate=ProcessingDate, @SerDate=DateOfService,@PriKey=DocID FROM Inserted

--If EngineNo not exist in db, update Reject & A1
IF EXISTS (Select EngineNo
            From Abbyy
            Where
                NOT EXISTS
                (Select EngineNo
                 From eDaftarOwnerDetail
                 where eDaftarOwnerDetail.EngineNo = @Identity))

    UPDATE Abbyy
    SET CouponStatus = 'Reject', RejectCode = 'A1'
    WHERE EngineNo = @Identity
    and DocID=@PriKey

--If Vehicle Registration No not exist in db, update Reject & A2
Else If EXISTS (Select VehRegNo
                From Abbyy
                Where
                    NOT EXISTS
                    (Select VehRegNo
                     From eDaftarOwnerDetail
                     Where eDaftarOwnerDetail.VehRegNo = @RegNo))
    UPDATE Abbyy
    SET CouponStatus = 'Reject', RejectCode = 'A2'
    WHERE VehRegNo = @RegNo
    and DocID=@PriKey

--If EngineNo & Vehicle Registration No does not matched, update Reject & A3
Else If EXISTS (Select EngineNo, VehRegNo
                From Abbyy
                Where
                    NOT EXISTS
                    (Select EngineNo, VehRegNo
                     From eDaftarOwnerDetail
                     Where eDaftarOwnerDetail.EngineNo = @Identity
                     and eDaftarOwnerDetail.VehRegNo = @RegNo))
    UPDATE Abbyy
    SET CouponStatus = 'Reject', RejectCode = 'A3'
    WHERE EngineNo = @Identity
    and VehRegNo = @RegNo
    and DocID=@PriKey

-- If EngineNo exist in db more then twice, update Reject & A4
Else If EXISTS (Select COUNT(1)
                From Abbyy
                Where EngineNo = @Identity
                Group by EngineNo 
                Having COUNT(1)>2)
    UPDATE Abbyy
    SET CouponStatus = 'Reject', RejectCode = 'A4'
    WHERE EngineNo = @Identity
    and DocID=@PriKey

-- If ProcessingDate more than ServiceDate 210 days, update Reject & A5 
Else If EXISTS (Select ProcessingDate, DateOfService
                From Abbyy
                Where
                datediff(day, @SerDate, @ProDate)>210)
    UPDATE Abbyy
    SET CouponStatus = 'Reject', RejectCode = 'A5'
    WHERE ProcessingDate = @ProDate
    and DateOfService = @SerDate
    and DocID=@PriKey

Else
UPDATE Abbyy
Set CouponStatus = 'Approve', RejectCode = ''
WHERE EngineNo = @Identity

-- Insert statements for trigger here

END

感谢任何人都能给我一些解决这个问题的指导。谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-10-03 04:52:20

在比较之前进行某种日期格式化,以便将两个值转换为相同的格式。

例子:

代码语言:javascript
运行
复制
WHERE CONVERT(VARCHAR,ProcessingDate,102) = CONVERT(VARCHAR,@ProDate,102)

代码语言:javascript
运行
复制
WHERE CONVERT(DATE,ProcessingDate,102) = CONVERT(DATE,@ProDate,102)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12701812

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档