0

我有一个表,其中包含 nvarchar(Max) 字段,每条记录包含大约 50,0000 个字符。当我插入数据时,它是好的,但是当更新数据时发生错误:“超时已过期在操作编译之前超时时间已过或服务器没有响应”

CREATE TABLE [dbo].[tblJudgementText]( [JudgementID] [int] NOT NULL, 
  [JudgementText] [nvarchar](max) NULL, 
  [Source] [nvarchar](500) NULL, 
  [UserID] [int] NULL, 
  [ModifiedDate] [datetime] NULL, 
  CONSTRAINT [PK_tblJudgementText] PRIMARY KEY CLUSTERED ( [JudgementID] ASC))

我也尝试将连接超时设置为 = 100

第二种方法我尝试删除第一条记录并插入新记录,但删除记录它会抛出相同的错误

4

2 回答 2

0

SQL Server 通常不会抛出超时错误。似乎错误是由客户端引发的,无论您使用什么客户端 API。一些客户端 API,例如。托管 SqlClient,将默认请求超时设置为 30 秒,请参阅SqlCommand.CommandTimeout,在此时间过后,它们会中止请求。

所以实际上你似乎有一个性能问题,你的UPDATE陈述可能需要超过 30 秒。我们无法猜测问题是什么,只有您知道正在发生的事情。将此视为性能问题,阅读等待和队列并尝试应用其方法。阅读了解 SQL Server 如何执行查询以了解要查找的内容。

我的体力告诉我,您的 UPDATE WHERE 子句包含导致扫描的不可分析条件。这要么阻止锁定,要么只是在 IO 上超时,即使我的精神力量也无法在没有任何信息的情况下解决这个问题......

发布准确的表定义、准确的 UPDATE 语句和执行计划(XML!,不是它的图片)。

于 2013-10-02T07:34:50.083 回答
0

您是从 SQL Server 客户端更新还是以编程方式进行更新..?在给出更新指令之前尝试给出'select .. for update'。

如果没有其他约束,甚至可以考虑删除记录并作为新记录插入。

于 2013-10-02T07:38:45.603 回答