【解決方案 十六】關鍵字 'with' 附近有語法錯誤

這個事兒的背景吧就是因爲加鎖查詢速度太慢,於是讓咱優化,至少先通過使用with(nolock)來解決查詢慢的問題,這麼個事兒說來也簡單對伐,但是影響範圍特別大,因爲要優化的這個存儲過程是個動態存儲過程,有70多個操作行爲DAO調用到了這個存儲過程,可謂牽一髮而動全身。

報錯了!

一開始自信滿滿,參照了一篇文章瞭解瞭解with(nolock)咋玩兒

SQL Server 中WITH (NOLOCK)淺析 https://www.cnblogs.com/kerrycode/p/3946268.html

想着就直接在存儲過程最後拼一個with(nolock)唄,類似這樣:

SELECT * FROM TML where Name='maolintian' and age=29 with(nolock)

結果一下報了一個大錯,直接影響了平臺的功能,大家的標準功能都不好使了。

消息 319,級別 15,狀態 1,第 1 行
關鍵字 'with' 附近有語法錯誤。如果此語句是公用表表達式、
xmlnamespaces 子句或者更改跟蹤上下文子句,那麼前一個語句必須以分號結尾。

於是使用如下方法來處理。

如何處理

怎麼排查呢?在傑哥大佬的幫助下使用print先把sql打出來看看:print @strSQL,使用完該語句打印出來後又查了下問題:

  1. 首先重新新建一個存儲過程,起個別名,在裏邊加入print @strSQL來打印,防止被影響了。
  2. 然後讓傑哥看了下原來是with(nolock)後置了。
  3. 排查好問題後,最後刪除新建的這個存儲過程。

調整後存儲過程應該爲:

SELECT * FROM TML  with(nolock)  where Name='maolintian' and age=29

這樣就解決了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章