请教下SQL这样写有问题吗

yjw474221531 2017-07-25 10:12:26
INSERT INTO #CalTab1(FDeptID,FCostObjID,FCostItemID)
select v.FDeptID,v.FCostObjID,u.FItemID FROM
(SELECT Distinct FDeptID,FCostObjID FROM #CalTab1) v
Cross join cbCostItem u
为什么当我这样写时插入了一些数据后(才几百行数据)就会报错,报错信息为
‘由于数据移动,无法继续以 NOLOCK 方式扫描。’
已经用dbcc检查过,数据库没有问题
...全文
352 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
OwenZeng_DBA 2017-07-27
  • 打赏
  • 举报
回复
楼主去哪里了,问题解决了吗
OwenZeng_DBA 2017-07-25
  • 打赏
  • 举报
回复
引用 11 楼 yjw474221531 的回复:
[quote=引用 10 楼 z10843087 的回复:] @yjw474221531 数据库版本是什么版本
SQL2008 R2版本[/quote] DBCC USEROPTIONS 查看下会话的事务隔离级别是不是RU
yjw474221531 2017-07-25
  • 打赏
  • 举报
回复
引用 10 楼 z10843087 的回复:
@yjw474221531 数据库版本是什么版本
SQL2008 R2版本
OwenZeng_DBA 2017-07-25
  • 打赏
  • 举报
回复
@yjw474221531 数据库版本是什么版本
yjw474221531 2017-07-25
  • 打赏
  • 举报
回复
各位牛人,在线等,问题比较急
引用 8 楼 z10843087 的回复:
[quote=引用 7 楼 yjw474221531 的回复:] [quote=引用 4 楼 sinat_28984567 的回复:] 检查一下这个表试试
DBCC CHECKTABLE ("cbCostItem")
已经检测过了,正常,谢谢[/quote] cbCostItem 是视图吗?[/quote] 是表,不是视图
OwenZeng_DBA 2017-07-25
  • 打赏
  • 举报
回复
引用 7 楼 yjw474221531 的回复:
[quote=引用 4 楼 sinat_28984567 的回复:] 检查一下这个表试试
DBCC CHECKTABLE ("cbCostItem")
已经检测过了,正常,谢谢[/quote] cbCostItem 是视图吗?
yjw474221531 2017-07-25
  • 打赏
  • 举报
回复
引用 4 楼 sinat_28984567 的回复:
检查一下这个表试试
DBCC CHECKTABLE ("cbCostItem")
已经检测过了,正常,谢谢
yjw474221531 2017-07-25
  • 打赏
  • 举报
回复
引用 3 楼 kingtiy 的回复:
1、快速修复 DBCC CHECKDB (‘数据库名‘, REPAIR_FAST) 2、重建索引并修复 DBCC CHECKDB (‘数据库名‘, REPAIR_REBUILD) 3、如果必要允许丢失数据修复 DBCC CHECKDB (‘数据库名‘‘, REPAIR_ALLOW_DATA_LOSS)
已经检查过,没问题,所有表我都基本单据DBCC CHECKTABLE过了,谢谢
yjw474221531 2017-07-25
  • 打赏
  • 举报
回复
测试过,SQL是有预读取机制的,不会出现这样的死循环情况,因为是临时表,数据也没有什么约束,并且DBCC检查过,没有问题,如果将临时表 #CalTab1换成具体的表就没有问题,或者是把 #CalTab1数据移到另外一临时表,再将后面SELECT中的 #CalTab1替换为另一临时表,都是正常的
引用 1 楼 rrocky 的回复:
这个提示应该很清楚了 你用#CalTab1里的数据插入到#CalTab1表,就像发生了死循环一样: #CalTab1表原来有10条数据 插入10条 #CalTab1有20条数据 插入20条 #CalTab1有30条数据 插入30条 …… 卒…… 看下是不是逻辑有问题,如果没问题,建议先将#CalTab1里原来的数据放到另一个临时表A,往#CalTab1插数据的时候,用A与cbCostItem关联查找
二月十六 2017-07-25
  • 打赏
  • 举报
回复
检查一下这个表试试
DBCC CHECKTABLE ("cbCostItem")
kingtiy 2017-07-25
  • 打赏
  • 举报
回复
1、快速修复 DBCC CHECKDB (‘数据库名‘, REPAIR_FAST) 2、重建索引并修复 DBCC CHECKDB (‘数据库名‘, REPAIR_REBUILD) 3、如果必要允许丢失数据修复 DBCC CHECKDB (‘数据库名‘‘, REPAIR_ALLOW_DATA_LOSS)
kingtiy 2017-07-25
  • 打赏
  • 举报
回复
引用 1 楼 rrocky 的回复:
这个提示应该很清楚了 你用#CalTab1里的数据插入到#CalTab1表,就像发生了死循环一样: #CalTab1表原来有10条数据 插入10条 #CalTab1有20条数据 插入20条 #CalTab1有30条数据 插入30条 …… 卒…… 看下是不是逻辑有问题,如果没问题,建议先将#CalTab1里原来的数据放到另一个临时表A,往#CalTab1插数据的时候,用A与cbCostItem关联查找
这说法不对吧. 1.先确定select 结果集 2.再执行insert操作. 中间并不会出现你说的那种死循环的操作的. 另外,这个错误应该是需要去checkdb,看看是不是表,或者索引有损坏的情况.
WayminS 2017-07-25
  • 打赏
  • 举报
回复
这个提示应该很清楚了 你用#CalTab1里的数据插入到#CalTab1表,就像发生了死循环一样: #CalTab1表原来有10条数据 插入10条 #CalTab1有20条数据 插入20条 #CalTab1有30条数据 插入30条 …… 卒…… 看下是不是逻辑有问题,如果没问题,建议先将#CalTab1里原来的数据放到另一个临时表A,往#CalTab1插数据的时候,用A与cbCostItem关联查找
OwenZeng_DBA 2017-07-25
  • 打赏
  • 举报
回复
你换个rc的隔离级别再试试
yjw474221531 2017-07-25
  • 打赏
  • 举报
回复
引用 12 楼 z10843087 的回复:
[quote=引用 11 楼 yjw474221531 的回复:] [quote=引用 10 楼 z10843087 的回复:] @yjw474221531 数据库版本是什么版本
SQL2008 R2版本[/quote] DBCC USEROPTIONS 查看下会话的事务隔离级别是不是RU[/quote] 事务隔离级别是RU的

22,206

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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