2012-11-30 301 views
0
recid | EffectiveFrom | EffectiveTo 
------------------------------------ 
    1 | 2012-11-25 | 2012-11-30 
    2 | 2012-11-26 | null 

我需要检查,如果新的日期落在effectivefromeffectiveTo 之间并停止插入触发..SQL Server中,INSERT触发器

+0

如果你有100行 - **我们应该检查哪些**'effectiveFrom'和'effectiveTo'?他们全部?而且:新插入行的哪一列**不允许落入这两个日期之间?您需要提供更多信息! –

+1

你有什么尝试?还是你希望有人编写你可以复制和使用的代码? – Raj

+0

请参阅:[触发器简介 - 第1部分](http://www.sqlteam.com/article/an-introduction-to-triggers-part-i)或仅在Google或Bing上搜索**!有**数千**的介绍性文章... http://bit.ly/U5Qq7U –

回答

0

试试这个:

USE {yourDB}; 

CREATE TRIGGER insertRecord ON {tblName} 
INSTEAD OF INSERT 
AS 
BEGIN 
    DECLARE @EffectiveFrom DATE; 
    DECLARE @EffectiveTo DATE; 
    DECLARE @newDate DATE; 
    SET @newDate = GETDATE(); -- DATE WHICH YOU WANT TO CHEK 
    SELECT @EffectiveFrom = EffectiveFrom FROM INSERTED; 
    SELECT @EffectiveTo = EffectiveTo FROM INSERTED; 

    IF (@newDate > @EffectiveFrom AND @newDate < @EffectiveTo) 
     BEGIN 
     INSERT INTO [{yourDB}].[dbo].[{tblName}] 
     SELECT * FROM INSERTED; 
     PRINT 'DATA SUCCESSFULLY ADDED.' 
     END 
    ELSE PRINT 'ERROR : DATE IS NOT IN BETWEEN EffectiveFrom and EffectiveTo DATE' 
END 


INSERT INTO [{yourDB}].[dbo].[{tblName}] VALUES(CAST('24-NOV-2012' AS DATE),CAST('30-NOV-2012' AS DATE)) 

消息 - 结果 错误:日期不在有效生效日期和生效日期之间

INSERT INTO [{yourDB}].[dbo].[{tblName}] VALUES(CAST('24-NOV-2012' AS DATE),CAST('02-DEC-2012' AS DATE)) 

消息 - 结果 (1 row(s)affected) 数据已成功添加。

+1

如果INSERT语句恰好插入**多行**,那么这是** NOT **开始工作;你会怎样'SELECT @EffectiveFrom = EffectiveFrom FROM INSERTED;'真的选择?正在检查10个插入的行中的哪一个? SQL Server中的触发器被称为**每批**一次(可能多于一行!)和“插入”可以包含1,5,10,100行。触发器是** NOT **每行被触发 –

+0

是的,它的true..it将一次插入单行。 –

+0

......但感谢我得到了解决方案,并启动并运行.. – user1666443