将Statement插入到同一个表中会导致不一致的瓶颈

时间:2015-03-13 13:45:25

标签: insert sql-server-2008-r2

我目前在数据库中使用的特定SQL Server表存在问题,当我选择的记录来自自己时,我无法在此表上运行insert语句。

以下是声明:

insert into [Custom Work] ([Description], [Price], [Cost], [Labour Cost], [Made In Material], [Bought Out Material], [Weight], [Machine Shop], [Axles], [Stakes/Bunks], [Beam], [GNK], [Parts], [Line], [Step 1], [Step 2], [Blast], [Paint], [Finish], [Finish - GNK], [Final Assembly], [Shipping], [Eng Hours], [Option Date])
   select 
       [Description], [Price], [Cost], [Labour Cost], 
       [Made In Material], [Bought Out Material], [Weight], 
       [Machine Shop], [Axles], [Stakes/Bunks], [Beam], 
       [GNK], [Parts], [Line], [Step 1], [Step 2], 
       [Blast], [Paint], [Finish], [Finish - GNK], 
       [Final Assembly], [Shipping], [Eng Hours], [Option Date] 
   from 
       [Custom Work]
   where 
       Description = 'custom stuff'
       and Quote# = 123456

当我从另一个表中插入记录时(比如当我们将标准选项添加为自定义工作时),它就像它一直有效一样!但是当我从它自己插入记录时,它会在这里和那里工作,但随后会超时(从Access运行时)或永远继续(如果从SSMS运行)。

这是在我进行了一些表结构更改之后开始发生的,但是我对我们的标准选项表进行了相同的结构更改...所以,如果我不能将记录插入到自身中,我就不应该这样做能够从另一个表中插入记录! :|

我也有一段时间来帮助诊断这个问题,但它并没有为潜在客户提供太多帮助......

没有针对此表设置的触发器,select / update语句也可以正常工作(来自我已经完成的所有实验)!我甚至在几小时后重启了SQL Server(运行SQL Server 2008 R2)(通常会为我解决这个问题),但这次没有。

我猜测是否存在损坏的表属性(外键/主键,约束,索引,统计信息等)?任何帮助将不胜感激:)

编辑:此表上的drop和create语句是否会修复此问题?如果没有,请删除并重新创建所有表属性?

2 个答案:

答案 0 :(得分:1)

您是否尝试过使用WITH(NOLOCK)?

insert into [Custom Work] ([Description], [Price], [Cost], [Labour Cost], [Made In Material], [Bought Out Material], [Weight], [Machine Shop], [Axles], [Stakes/Bunks], [Beam], [GNK], [Parts], [Line], [Step 1], [Step 2], [Blast], [Paint], [Finish], [Finish - GNK], [Final Assembly], [Shipping], [Eng Hours], [Option Date])
   select 
       [Description], [Price], [Cost], [Labour Cost], 
       [Made In Material], [Bought Out Material], [Weight], 
       [Machine Shop], [Axles], [Stakes/Bunks], [Beam], 
       [GNK], [Parts], [Line], [Step 1], [Step 2], 
       [Blast], [Paint], [Finish], [Finish - GNK], 
       [Final Assembly], [Shipping], [Eng Hours], [Option Date] 
   from 
       [Custom Work] WITH (NOLOCK)
   where 
       Description = 'custom stuff'
       and Quote# = 123456

答案 1 :(得分:0)

通过与Yugz聊天讨论这个问题之后,这个问题一直存在于这个特定的表中,因为我的前端Acccess数据库仍然在这个表上有锁定记录(这导致我的无锁插入语句旋转并阻碍SQL性能)。另外,我还没有定期重建我的SQL数据库索引。

因此,对于遇到此问题的其他人,请确保选择数据的前端应用程序不会锁定记录并重建索引! :)