我有以下存储过程:
ALTER PROCEDURE [dbo].[BK_NUMBER]
(@Category NUMERIC(38, 0))
WITH EXECUTE AS CALLER
AS
DECLARE @RunningNumber Int
DECLARE @min Int
DECLARE @max Int
DECLARE @newRunningNumber Int
BEGIN
SELECT @RunningNumber = RunningNumber
FROM PARKMARKENNUMMER
WHERE PARKMARKENTYP_ID = @Category
UPDATE PARKMARKENNUMMER
SET RUNNINGNUMBER = @RunningNumber + 1
WHERE PARKMARKENTYP_ID = @Category
SELECT @newRunningNumber = RunningNumber
FROM PARKMARKENNUMMER
WHERE PARKMARKENTYP_ID = @Category
RETURN @newRunningNumber;
End;
Run Code Online (Sandbox Code Playgroud)
我尝试@newRunningNumber使用这个VB代码:
Dim sqlConnection As New SqlConnection(MSSQL_Helper.strConnectionBookit)
Dim command As New SqlCommand("BK_NUMBER", sqlConnection)
command.CommandType = CommandType.StoredProcedure
command.Parameters.Add("@Category", SqlDbType.Int).Value = ID
Dim returnParameter As SqlParameter = command.Parameters.Add("RetVal", SqlDbType.Int)
returnParameter.Direction = ParameterDirection.ReturnValue
sqlConnection.Open()
command.ExecuteNonQuery()
sqlConnection.Close()
Dim returnValue As Integer = returnParameter.Value
Return returnValue
Run Code Online (Sandbox Code Playgroud)
但它总是返回"0".我究竟做错了什么?
你实际上没有返回值:
RETURN @newRunningNumber
Run Code Online (Sandbox Code Playgroud)
但是,正如Aaron Bertrand所说,您应该将其设置为OUTPUT参数或将SELECT其设置为退出.
OUTPUT:
ALTER PROCEDURE [dbo].[BK_NUMBER]
(
@Category NUMERIC(38, 0),
@newRunningNumber INT
)
Dim newRunningNumber As SqlParameter("@newRunningNumber", SqlDbType.Int)
newRunningNumber.Direction = ParameterDirection.Output
// execute
Dim returnValue As Integer = newRunningNumber.Value
Run Code Online (Sandbox Code Playgroud)
选择:
SELECT @newRunningNumber AS NewRunningNumber
Dim returnValue As Integer = CType(command.ExecuteScalar(), Integer)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7051 次 |
| 最近记录: |