存储过程中OUTPUT类型参数的使用总结
作为演示,首先我们建立一个存储过程,当然这个存储过程会包含一个OUTPUT类型的参数:
这段代码很简单,重点在于OUTPUT类型的参数后面一定要有OUTPUT。
既然是输出的,当然要有个输出的地方,也就是为了运行这个存储过程,首先要先声明一个变量,调用的方法如下:
结果自然是abc,这里的关键就是传参的时候,一定要加OUTPUT,我老忘这个事情,呵呵。
上边是在SSMS中进行调用的,可是如果我们要是在ADO.NET中进行调用该怎么做呢,其实很简单的,当然额外要做的事情就是要加OUTPUT咯,具体参考以下代码:
关键的地方是要设置参数的Direction属性。
剩下的就是废话了,其实开始的时候是打算用SQL Server自带的自定义函数的,可是限制太多,比如在自定义函数中不可以使用Insert或者Update,比较恼火,呵呵。
CREATE PROCEDURE MyTest
@MyVar varchar(25) OUTPUT
AS
BEGIN
SELECT @MyVar = 'abc'
END
GO
@MyVar varchar(25) OUTPUT
AS
BEGIN
SELECT @MyVar = 'abc'
END
GO
这段代码很简单,重点在于OUTPUT类型的参数后面一定要有OUTPUT。
既然是输出的,当然要有个输出的地方,也就是为了运行这个存储过程,首先要先声明一个变量,调用的方法如下:
DECLARE @TestVar VARCHAR(25)
EXEC MyTest @TestVar OUTPUT
SELECT @TestVar
EXEC MyTest @TestVar OUTPUT
SELECT @TestVar
结果自然是abc,这里的关键就是传参的时候,一定要加OUTPUT,我老忘这个事情,呵呵。
上边是在SSMS中进行调用的,可是如果我们要是在ADO.NET中进行调用该怎么做呢,其实很简单的,当然额外要做的事情就是要加OUTPUT咯,具体参考以下代码:
public static string GetTestResult()
{
string ret = string.Empty;
using (SqlConnection sqlConnection = new SqlConnection(GetConnectionString()))
{
SqlCommand nonQueryCommand = new SqlCommand();
nonQueryCommand.Connection = sqlConnection;
nonQueryCommand.CommandText = "MyTest";
nonQueryCommand.CommandType = CommandType.StoredProcedure;
SqlParameter returnParameter = nonQueryCommand.Parameters.Add("@MyVar", SqlDbType.VarChar, 25);
returnParameter.Direction = ParameterDirection.Output;
nonQueryCommand.Connection.Open();
nonQueryCommand.ExecuteNonQuery();
ret = returnParameter.Value.ToString();
}
return ret;
}
{
string ret = string.Empty;
using (SqlConnection sqlConnection = new SqlConnection(GetConnectionString()))
{
SqlCommand nonQueryCommand = new SqlCommand();
nonQueryCommand.Connection = sqlConnection;
nonQueryCommand.CommandText = "MyTest";
nonQueryCommand.CommandType = CommandType.StoredProcedure;
SqlParameter returnParameter = nonQueryCommand.Parameters.Add("@MyVar", SqlDbType.VarChar, 25);
returnParameter.Direction = ParameterDirection.Output;
nonQueryCommand.Connection.Open();
nonQueryCommand.ExecuteNonQuery();
ret = returnParameter.Value.ToString();
}
return ret;
}
关键的地方是要设置参数的Direction属性。
剩下的就是废话了,其实开始的时候是打算用SQL Server自带的自定义函数的,可是限制太多,比如在自定义函数中不可以使用Insert或者Update,比较恼火,呵呵。