日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Sqlserver别太信任SysComments表中的text字段

發(fā)布時間:2023/12/18 编程问答 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Sqlserver别太信任SysComments表中的text字段 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

?

1、用SysComments的原因

最近新模塊的開發(fā),需要更改和新增的存儲過程比較多,為了同步開發(fā)環(huán)境和測試環(huán)境的存儲過程,能在更新程序后,馬上能整理出更改的存儲過程腳本,并更新到測試DB服務器上,我用了SqlServer的系統(tǒng)表SysComments,它記錄了數(shù)據(jù)庫中所有的對象,當然包括了存儲過程,該表有個text字段,它記錄了sql定義的腳本內(nèi)容,如果是存儲過程,則記錄的存儲過程腳本。用它,可以寫批量sql語句,直接幫助同步存儲過程到測試數(shù)據(jù)庫,因為為了和以后生成環(huán)境更新方式一致,需要整理出腳本,因此采用了sql語句獲取存儲過程內(nèi)容的方式。

2、遇到問題

在獲取存儲過程腳本中,遇到了問題,就是更改了存儲過程名字后,通過SysCommentstext字段獲取到的存儲過程內(nèi)容,存儲過程名稱還是更改前的名稱,比如以前存儲過程名稱叫abc,更改為def,但查詢SysCommentstext字段內(nèi)容,同樣為create procedure abc。。。這樣當每次更新450個存儲過程,甚至更多的時候,測試系統(tǒng)會發(fā)生莫名其妙的問題,因為沒有真正更改到需要修改或新增的存儲過程。比如,我們先按照最后修改日期查詢出最近更改的存儲過程:

SELECT TOP 30?a.[name], a.crdate, a.refdate, b.[text]

from sysobjects a, syscomments b

where a.id = b.id and

?a.xtype = 'p'

ORDER BY a.refdate DESC

或者用下面的系統(tǒng)視圖查詢:

SELECT TOP 10 ir.SPECIFIC_NAME, ir.CREATED, ir.LAST_ALTERED

FROM INFORMATION_SCHEMA.ROUTINES ir

ORDER BY ir.LAST_ALTERED DESC

然后查詢某一條存儲過程內(nèi)容:

sp_helptext UP_KERNAL_USR_SP_GetListByConsumerID

按常理,這里獲取到的腳本,就可以作為該存儲過程的更新腳本,但如果存儲過程是更改了名稱,而沒有更改內(nèi)容,則這個腳本的存儲過程名稱有可能就不正確了。經(jīng)過測試,如果修改了存儲過程內(nèi)容,SysComments表中的text字段才會更新為正確的內(nèi)容,猜測是內(nèi)容有觸發(fā)機制,沒有更改內(nèi)容就不觸發(fā)同步數(shù)據(jù)到系統(tǒng)表存儲,所以只更改名稱,SysComments表中的text字段內(nèi)容沒有更新。

?

3、相關資料:

經(jīng)過查詢,發(fā)現(xiàn)微軟官網(wǎng)的幫助和支持里有說明:PRB: Renaming Stored Procedure, View or Trigger does not update SYSCOMMENTS table

,具體鏈接:http://support.microsoft.com/kb/243198/en-us,大概說了確實有這個問題,文章并且說了該問題存在于SQL2005各個版本及以下部分版本,解決方法是刪除老存儲過程,再創(chuàng)建新存儲過程,當然對于不從SysCommentstext字段取內(nèi)容的情況下,直接改名字沒什么影響。但該文章是20031114日的,對現(xiàn)在是否有補丁或處理方式,不得而知。

?

4、總結(jié)

我本地Microsoft SQL Server 2005 - 9.00.3042.00版本的SqlServer依然有這個問題,臨時解決辦法,只有獲取內(nèi)容后,再修改存儲過程名稱的方式。以后如果用sql腳本讀取SysCommentstext字段來獲取存儲過程,需要注意到存儲過程名稱是否有問題。當然非腳本的手工操作,可以保證不會出現(xiàn)問題,選中數(shù)據(jù)庫-右鍵-任務-導出腳本。

其他非官方網(wǎng)站也很少搜索到相關內(nèi)容,如描述有問題,請指出,謝謝!

?

轉(zhuǎn)載于:https://www.cnblogs.com/Lawson/archive/2011/05/30/2063370.html

總結(jié)

以上是生活随笔為你收集整理的Sqlserver别太信任SysComments表中的text字段的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。