SQL SERVER 2008 插入数据与外键冲突的问题。

moaijiaren 2013-07-28 04:45:06
我现在需要写一份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。我的存储过程对么?
...全文
654 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
唐诗三百首 2013-07-29
  • 打赏
  • 举报
回复
最简单的方法就是删除FOREIGN KEY约束, 个人建议少用FOREIGN KEY.
moaijiaren 2013-07-28
  • 打赏
  • 举报
回复
哦哦,明白了。就是只要是外键关联的那张表里有我要插入的系列值里的外键值就能插入是这样么。您能帮我看看这个存储过程还有其他的问题么?如果关联外键的表中有想要插入的值的话是否可以插入?datefirst貌似是个全局变量,我是参考别人的,但是他的源存储过程中看不到对于这个全局变量的定义,能直接用么? 谢谢!
Andy__Huang 2013-07-28
  • 打赏
  • 举报
回复
这是存在约束关系,你插入的monthid的值在外键表中不存在,比如外键只有值1,2,3,但是你插入4,系统每就损错,因为约束已限制
moaijiaren 2013-07-28
  • 打赏
  • 举报
回复
最好就是直接告诉我一下解决办法!我现在看书来不及啦!求帮忙!
moaijiaren 2013-07-28
  • 打赏
  • 举报
回复
定一下!求帮忙!
moaijiaren 2013-07-28
  • 打赏
  • 举报
回复
可是我现在时间比较紧急,能帮我想想办法么。
Andy__Huang 2013-07-28
  • 打赏
  • 举报
回复
我看错误提示已经很明显了,你不了解外键数据的约束关系吗?你外键概念弄清楚问题就就解决了

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧