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自定義函數的參數也有類似情況。