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