- /*SP2*/
- CREATE PROCEDURE dbo.delUserAll
- as
- set nocount on
- begin
- delete from dbo.[userinfo]
- end
- go
该存储过程删去userinfo表中的所有记录,没有任何输入及输出,调用方法与上面讲过的基本相同,只是不用取得记录集:
- ''**通过Command对象调用存储过程**
- DIM MyComm
- Set MyComm = Server.CreateObject("ADODB.Command")
- MyComm.ActiveConnection = MyConStr ''MyConStr是数据库连接字串
- MyComm.CommandText = "delUserAll" ''指定存储过程名
- MyComm.CommandType = 4 ''表明这是一个存储过程
- MyComm.Prepared = true ''要求将SQL命令先行编译
- MyComm.Execute ''此处不必再取得记录集
- Set MyComm = Nothing
当然也可通过Connection对象或Recordset对象调用此类存储过程,不过建立Recordset对象是为了取得记录集,在没有返回记录集的情况下,还是利用Command对象吧。
3. 有返回值的存储过程
在进行类似SP2的操作时,应充分利用SQL Server强大的事务处理功能,以维护数据的一致性。并且,我们可能需要存储过程返回执行情况,为此,将SP2修改如下:
- /*SP3*/
- CREATE PROCEDURE dbo.delUserAll
- as
- set nocount on
- begin
- BEGIN TRANSACTION
- delete from dbo.[userinfo]
- IF error=0
- begin
- COMMIT TRANSACTION
- return 1
- end
- ELSE
- begin
- ROLLBACK TRANSACTION
- return 0
- end
- return
- end
- go
以上存储过程,在delete顺利执行时,返回1,否则返回0,并进行回滚操作。为了在ASP中取得返回值,需要利用Parameters集合来声明参数:
- ''**调用带有返回值的存储过程并取得返回值**
- DIM MyComm,MyPara
- Set MyComm = Server.CreateObject("ADODB.Command")
- MyComm.ActiveConnection = MyConStr ''MyConStr是数据库连接字串
- MyComm.CommandText = "delUserAll" ''指定存储过程名
- MyComm.CommandType = 4 ''表明这是一个存储过程
- MyComm.Prepared = true ''要求将SQL命令先行编译
- ''声明返回值
- Set Mypara = MyComm.CreateParameter("RETURN",2,4)
- MyComm.Parameters.Append MyPara
- MyComm.Execute
- ''取得返回值
- DIM retValue
- retValue = MyComm(0) ''或retValue = MyComm.Parameters(0)
- Set MyComm = Nothing
在MyComm.CreateParameter("RETURN",2,4)中,各参数的含义如下:
第一个参数("RETURE")为参数名。参数名可以任意设定,但一般应与存储过程中声明的参数名相同。此处是返回值,我习惯上设为"RETURE";
第二个参数(2)