SQL SERVER 2008 插入数据与外键冲突的问题。
我现在需要写一份YearToMonth的存储过程,之前有人已经写好了的Month的,所以Month表中有值,下面是我写的存储过程
alter PROCEDURE [dbo].[proc_YTM]
@Starttime datetime,
@Endtie datetime
AS
BEGIN
--清除表中数据
delete Dim_Date_YearToMonth
--声明变量
set datefirst 1
declare @YTMID datetime
declare @Loop datetime
--插入数据开始
set @Loop=@Starttime
while @Loop<=@Endtie
begin
set @YTMID =
case when @Loop<=DATEADD(mm,12-(DATEPART(mm,@starttime)+@@DATEFIRST-2)%12-1,@Starttime)
then @Starttime
--DATEADD(Day,@number-(DATEPART(Weekday,@dt)+@@DATEFIRST-2)%12-1,@dt) 得到的是@starttime的年月加12的整周
--%取余的符号。12-(DATEPART(Weekday,@strattime)+@@DATEFIRST-2)%12-1得到的是12-最开始时间的周的部分,再通过dateadd加上最开始时间的周的部分,即为12(以时间的格式)
else DATEADD(mm,1-(DATEPART(mm,@Loop)+@@DATEFIRST-2)%12-1,@Loop)
--否则即为1-a+a=1
end
while @YTMID <= DATEADD(mm,datepart(mm,@Loop)-(DATEPART(mm,@Loop)+@@DATEFIRST-2)%12-1,@Loop)
--当WTDID小于@Loop
begin
-- 开始向表中插入数据
insert into dbo.Dim_Date_YearToMonth
select
datename(year,@Loop) + datename(month,@Loop) + right(convert(nchar(8),@Loop,112),2)
,datename(year,@YTMID) + datename(month,@YTMID) + right(convert(nchar(8),@YTMID,112),2)
,null
select @YTMID=dateadd(mm,1,@YTMID)
end
select @Loop = dateadd(mm,1,@Loop)
end
end
GO
存储过程在执行的时候会报下面的错误:
(0 行受影响)
消息 547,级别 16,状态 0,过程 proc_YTM,第 36 行
INSERT 语句与 FOREIGN KEY 约束"FK_Reference_41"冲突。该冲突发生于数据库"test11",表"dbo.Dim_Date_Month", column 'MonthID'。
语句已终止。请问这个问题该如何解决啊,什么问题?我的存储过程对么?要达到的效果就是比如说2011年7月。MonthID列的201107就会有如下值与之对应,YearToMonth列就会有201101、201102、201103……201107。我的存储过程对么?