--新增
create trigger a on tb
for insert
as
declare @cs int,@yearno int,@f int
select @cs=@@rowcount
set @f=0select top 1 @yearno=year(日期) from inserted
if (@yearno%4=0 and @cs=366) or (@yearno%4<>0 and @cs=365)
set @f=1
if @f=0
rollback
go--删除
create trigger b on tb
for delete
as
declare @cs int,@yearno int,@f int
select @cs=@@rowcount
set @f=0select top 1 @yearno=year(日期) from deleted
if (@yearno%4=0 and @cs=366) or (@yearno%4<>0 and @cs=365)
set @f=1
if @f=0
rollback
go

解决方案 »

  1.   

    --(1)批量添加(导入)记录时,要求必须是整年的气象数据,如果检查发现导入的气象数据中某地某年的气象数据记录不满365(非闰年)或366(闰年),则该次批量添加(导入)失败。--会同时导入多个地区,多年的数据吗?如果会
    create trigger tr_insert on 表
    for insert
    as
    if exists(
    select * from(
    select 地区,年=year(日期),天数=count(*)
    from inserted group by 地区,year(日期)
    )a
    where case day(dateadd(year,年-1900,'1900-3-1')-1) when 28 then 365 else 366 end<>天数)
    begin
    raiserror('导入错误,导入的天数不完整!导入失败',1,16)
    rollback tran
    end
      

  2.   

    --  (2)批量删除记录时,要求整年整年的删,不允许删除某地某年中一天、几天或部分天数的记录。
    create trigger tr_delete on 表
    for delete 
    as
    if exists(select * from 表 a where exists(select * from deleted where 地区=a.地区 and datediff(year,日期,a.日期)=0))
    begin
    raiserror('删除错误,必须整年删除!删除失败',1,16)
    rollback tran
    end