五月综合激情婷婷六月,日韩欧美国产一区不卡,他扒开我内裤强吻我下面视频 ,无套内射无矿码免费看黄,天天躁,日日躁,狠狠躁

新聞動態(tài)

SQL SERVER修改函數(shù)名容易引發(fā)的問題分析

發(fā)布日期:2021-12-21 02:08 | 文章來源:CSDN

1. 問題

今天遇到一個奇怪的問題:使用sp_helptext XXX查詢出來的函數(shù)定義名竟然跟函數(shù)名不同,而sp_helptext實際是查詢sys.all_sql_modules這個系統(tǒng)視圖的。直接查詢這個視圖的definition字段,發(fā)現(xiàn)跟sp_helptext是一樣的。難道是系統(tǒng)視圖也存在緩存之類的機制?或者是個BUG?對于第一個問題,當時情況緊急,沒有時間去求證是否存在了。第二個問題,我想沒什么可能,SQL SERVER發(fā)展到今天(SQL 2016正式版準備推出,我使用的環(huán)境則是SQL 2008 R2,打了SP3),已經(jīng)是很成熟的一個系統(tǒng),即使是出現(xiàn)BUG也不是我這種水平的人能發(fā)現(xiàn)的,肯定是哪我哪里弄錯了。于是求助于數(shù)據(jù)庫技術交流群,很快有大神回答了是改名的問題。我馬上就想起這個函數(shù)在一個多星期前,因為測試的需要,通過SSMS改了原函數(shù)名,而SQL SERVER不會因為改名去更新sys.all_sql_modules視圖的definition字段的!于是就造成了已經(jīng)編譯好的函數(shù)與sys.all_sql_modules系統(tǒng)視圖的函數(shù)定義出現(xiàn)了不一致的情況。

2. 重視與分析問題

做一個測試來重現(xiàn)下問題。首先,新建一個簡單的測試函數(shù)dbo.ufn_test_1。

USE AdventureWorks2008R2;
GO
IF OBJECT_ID(N'dbo.ufn_test_1') IS NOT NULL
BEGIN
DROP FUNCTION dbo.ufn_test_1;
END
GO
CREATE FUNCTION dbo.ufn_test_1 ()
RETURNS CHAR(1)
AS
BEGIN
RETURN ('F');
END
GO 

code-1: 創(chuàng)建函數(shù)dbo.ufn_test_1

這時,使用sp_helptext和sys.all_sql_modules查詢,一切正常。

EXEC sp_helptext [dbo.ufn_test_1];
GO
SELECT OBJECT_ID('dbo.ufn_test_1') AS a, * 
FROM sys.all_sql_modules
WHERE [object_id] = OBJECT_ID('dbo.ufn_test_1');
GO 

code-2:查詢函數(shù)dbo.ufn_test_1的定義

figure-1: 查詢函數(shù)dbo.ufn_test_1的定義

在SSMS上直接改名為dbo.ufn_test_2。

figure-2: 修改函數(shù)名

再去查詢函數(shù)dbo.ufn_test_2的定義。這樣,就出現(xiàn)了已經(jīng)編譯好的函數(shù)跟在視圖中的函數(shù)定義出現(xiàn)了不一致的情況!如果通過sp_helptext和sys.all_sql_modules查詢出現(xiàn)的定義去更新生產(chǎn)服務器,就肯定會出現(xiàn)問題。

3. 解決與結論

解決方法也很簡單,把這個函數(shù)重建即可。如果使用SSMS的右鍵修改(Modify)或生成相關腳本(Script Function as)的菜單,則不會出現(xiàn)以上的問題。同樣的問題與解決方法,也適用于存儲過程。

結論:

(1)盡量不要修改對象名,確實要修改的話,就重建吧。如果是表并且包含的大量數(shù)據(jù)要重建的話,就比較麻煩了,即使是修改表名不會出現(xiàn)像函數(shù)、存儲過程的問題,但修改表名涉及應用程序等問題。

(2)盡量使用SSMS的右鍵菜單修改或生成對象的定義。但如果函數(shù)或存儲過程太多,會覺得sp_helptext和sys.all_sql_modules會更方便些,查詢出來的結果要認真核對下對象名是否一致即可。這里提一下,sp_helptext有些限制,可以參考SQL中print、sp_helptext的限制與擴展。

版權聲明:本站文章來源標注為YINGSOO的內(nèi)容版權均為本站所有,歡迎引用、轉(zhuǎn)載,請保持原文完整并注明來源及原文鏈接。禁止復制或仿造本網(wǎng)站,禁止在非maisonbaluchon.cn所屬的服務器上建立鏡像,否則將依法追究法律責任。本站部分內(nèi)容來源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來,僅供學習參考,不代表本站立場,如有內(nèi)容涉嫌侵權,請聯(lián)系alex-e#qq.com處理。

實時開通

自選配置、實時開通

免備案

全球線路精選!

全天候客戶服務

7x24全年不間斷在線

專屬顧問服務

1對1客戶咨詢顧問

在線
客服

在線客服:7*24小時在線

客服
熱線

400-630-3752
7*24小時客服服務熱線

關注
微信

關注官方微信
頂部