2013-10-02 221 views
0

我有一個表有nvarchar(最大)字段,它包含每個記錄約50,0000 字符。當我插入的數據,這是確定的,但在更新的數據則發生 錯誤:「超時過期操作的編譯或服務器之前經過的超時時間沒有響應」更新nvarchar超時到期(最大)

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

第二個辦法,我試圖刪除第一條記錄,並插入新的,但刪除其條記錄拋出同樣的錯誤

+2

您必須提供select語句,也許有一些表定義。 –

+0

可能需要更多的時間,你可以增加你的超時時間。 – Anand

回答

0

SQL Server不正常拋出超時錯誤。看起來錯誤是由客戶端拋出的,無論使用哪種客戶端API。一些客戶端API,例如。在管理的SqlClient中,設置默認請求超時時間爲30秒,請參閱SqlCommand.CommandTimeout,並在此時間過後,他們中止請求。

所以事實上,你有一個性能問題,你的UPDATE聲明可能需要超過30秒。我們無法猜出問題所在,只有你掌握了所發生的情況。將此視爲性能問題,請閱讀Waits and Queues並嘗試應用其方法。閱讀Understanding how SQL Server executes a query知道要查找什麼。

我的物理能力告訴我,您的UPDATE WHERE子句包含導致掃描的non-sargable條件。這可能會阻止鎖定或僅在IO上超時,即使我的pshyhic權力也無法找出沒有w/o任何信息的此項權限...

發佈extact表定義,確切的UPDATE語句和execution plan(XML! ,而不是它的圖片)。

0

您是從SQL服務器客戶端更新還是以編程方式進行更新? 嘗試在給出更新指令之前給'select .. for update'。

如果沒有其他限制,您甚至可以考慮刪除記錄並插入爲新記錄。

+0

使用存儲過程更新我試着先刪除記錄並插入新的記錄,但刪除它拋出相同的錯誤 – user2837615

+0

似乎你可能不得不重寫代碼/查詢,以便一次刪除一條記錄,然後執行插入操作。可能您可能會在單個查詢中刪除大量記錄。如果您可以從存儲過程中發佈片段,那就太棒了。 –