日期:2014-05-17  浏览次数:20463 次

在SQL SERVER建立一个触发器对表进行新增时删除数据要怎么写
现在有一张表px_mian,表里面要用到的字段有opdate(操作时间),px_startdate(开始时间)
opdate是导入数据的时间,而px_startdate是培训开始时间
比如今天是3月22号,那么我就只能导入3月7号之后的数据,也就是本月数据,不能导入其他月份的数据,如果导入了就要对其进行删除。
比如到了4月1号时,那么我就能导入4月7号之前的数据,也就是3月份和4月份的数据,如果导入其他月份的数据也要对其删除。
总体来说就是本月可以导入上月和本月数据但必须是在本月7号前,如果7号之后就只能导入本月数据,请问这个删除语句怎么写了?O(∩_∩)O谢谢

------解决方案--------------------
不用写删除语名。
做一个instead of 触发器就行了。
CREATE TRIGGER InsteadTrigger on px_mian
INSTEAD OF INSERT
AS
BEGIN
  if ...
  INSERT INTO px_mian
       SELECT * FROM inserted
END;
------解决方案--------------------
1、触发器少用,管理困难系统大了你头就大了
2、删数据应该谨慎不要做成自动。大批量的操作更应该考虑性能,不应该一条一条的操作,最好做一个SP来处理批次新增删除处理。
3、然后这个条件很简单
你需要获得两个日期范围,你再根据这两个开始结束日期做,删除会新增限制就行



declare @nowdate datetime
set @nowdate=getdate()
--set @nowdate='2013/03/06'
declare @begindate varchar(10)
declare @enddate varchar(10)
if datepart(dd,@nowdate)<7
begin
select @begindate=left(convert( varchar(10),dateadd(month,-1,@nowdate),111),8)+'01'
select @enddate=left(convert( varchar(10),@nowdate,111),8)+'07'
end
else
begin
set @begindate=left(convert( varchar(10),getdate(),111),8)+'07'
set @enddate =convert(varchar(10),dateadd(dd,-1,left(convert( varchar(10),dateadd(month,1,@nowdate),111),8)+'01'),111)
end

select @begindate,@enddate