MS SQL Server存儲過程參數(shù)的隱式類型轉(zhuǎn)換
Microsoft SQL Server 2000數(shù)據(jù)表的列和存儲過程的參數(shù)都是有類型的,但我發(fā)現(xiàn)在寫存儲過程時(shí)很多參數(shù)類型是可以“混用”的,比如,下面的存儲過程:
/**//* Name :;Stp_TestDifferentParaType_INT Function :測試不同參數(shù)類型對存儲過程的影響 Author :Waxdoll Cheung Date :;2005-04-07 */ CREATE PROCEDURE dbo.Stp_TestDifferentParaType_INT -- 統(tǒng)計(jì)年月 @TongJiNianYue INT AS SELECT [FM_產(chǎn)品登記].* FROM [FM_產(chǎn)品登記] WHERE (所屬年份 = @TongJiNianYue); RETURN GO
和下面的存儲過程:
/**//* Name :;Stp_TestDifferentParaType_CHAR Function :測試不同參數(shù)類型對存儲過程的影響 Author :Waxdoll Cheung Date :;2005-04-07 */ CREATE PROCEDURE dbo.Stp_TestDifferentParaType_CHAR -- 統(tǒng)計(jì)年月 @TongJiNianYue CHAR(4) AS SELECT [FM_產(chǎn)品登記].* FROM [FM_產(chǎn)品登記] WHERE (所屬年份 = @TongJiNianYue); RETURN GO
在測試存儲過程時(shí)輸出的結(jié)果是一樣的,而數(shù)據(jù)列是有類型的——CHAR(4), 為什么呢?應(yīng)該是存儲過程在執(zhí)行時(shí)對參數(shù)進(jìn)行了隱式類型轉(zhuǎn)換。
但寫存儲過程時(shí)確定參數(shù)的類型時(shí)應(yīng)該注意: 1、應(yīng)該盡量使用和數(shù)據(jù)列類型相同的數(shù)據(jù)類型,減少運(yùn)行是的隱式類型轉(zhuǎn)換; 2、不是所有類型都可以進(jìn)行隱式類型轉(zhuǎn)換的,如果使用不同的數(shù)據(jù)類型,很可能會發(fā)生錯(cuò)誤:; 圖:Microsoft SQL Server數(shù)據(jù)類型轉(zhuǎn)換圖
另外,SQL Server自定義函數(shù)的參數(shù)也有類似情況。
