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