摘要:ASP呼叫Stored Procedure的問題
在設計Stored Procedure的時候,我們可以在變數後面直接設定預設值,這樣再呼叫的時候,可以略過有設定預設值的參數,範例如下:
CREATE PROCEDURE proc_calculate_taxes (
@p1 smallint = 42,
@p2 char(1),
@p3 varchar(8) = 'CAR'
)
AS
SELECT * FROM mytable
這樣當我們要執行此Stored Procedure的時候我們可以使用如下的方式呼叫:
EXECUTE proc_calculate_taxes @p2 = 'A'
EXECUTE proc_calculate_taxes 69, 'B'
EXECUTE proc_calculate_taxes 69, 'C', 'House'
EXECUTE proc_calculate_taxes @p1 = DEFAULT, @p2 = 'D'
EXECUTE proc_calculate_taxes DEFAULT, @p3 = 'Local', @p2 = 'E'
EXECUTE proc_calculate_taxes 69, 'F', @p3 = DEFAULT
EXECUTE proc_calculate_taxes 95, 'G', DEFAULT
EXECUTE proc_calculate_taxes DEFAULT, 'H', DEFAULT
EXECUTE proc_calculate_taxes DEFAULT, 'I', @p3 = DEFAULT
要注意的地方是在於,如果要省略第一個跟第三個參數,只傳第二個參數的話,那就必須在第一個使用DEFAULT或是直接指定變數的內容如 [ @p2='A' ]
而在ASP中要呼叫Stored Procedure的方法也有幾種,而現在主要要說明的是下面這種方式
' 建立Command
set Cmd=Server.CreateObject("Adodb.Command")
Cmd.ActiveConnection=conn
Cmd.CommandText="proc_calculate_taxes" '指定Stored Procedure
Cmd.CommandType=4 '設定CommandType,4為Stored Procedure
' 設定 stored procedure 的參數
Cmd.Parameters.Append Cmd.CreateParameter("p1",3,1,,var1)
Cmd.Parameters.Append Cmd.CreateParameter("p2",130,1,1,var2)
Cmd.Parameters.Append Cmd.CreateParameter("p3",200 ,1,8,var3)
'執行stored procedure
Cmd.Execute ()
set Cmd=Server.CreateObject("Adodb.Command")
Cmd.ActiveConnection=conn
Cmd.CommandText="proc_calculate_taxes" '指定Stored Procedure
Cmd.CommandType=4 '設定CommandType,4為Stored Procedure
' 設定 stored procedure 的參數
Cmd.Parameters.Append Cmd.CreateParameter("p1",3,1,,var1)
Cmd.Parameters.Append Cmd.CreateParameter("p2",130,1,1,var2)
Cmd.Parameters.Append Cmd.CreateParameter("p3",200 ,1,8,var3)
'執行stored procedure
Cmd.Execute ()
在上面的呼叫方式中,原本以為如果不想傳遞第一個參數的話,直接將將第一個參數的append那行拿掉就可以了,但情況似乎不是這樣,因為直接拿掉的話, 程式就會出現錯誤,說無法轉換類型之類的,而主要原因似乎是因為用這樣的方式設定參數的話,不能省略任何參數,即使有設定預設值,可是偏偏我又找不到用這 種方式要塞預設值的方法!!
所以只好改寫Stored Procedure.