日期:2014-05-17  浏览次数:20431 次

存储过程判断问题
sql代码
SQL code

use OperationData
go
create procedure Pro_UserMax
@maxNum int output
as
begin
select @maxNum=MAX(Convert(int,PerNum)) from Sys_user
if @maxNum is null  --@maxNum为null的话就返回10001
return 10001
else                --否则返回最大值
return @maxNum
end


@maxNum的值为null 存储过程应该返回的是10001

C#代码
C# code

//获取最大值
        public static int ExecuteMaxQuery(string connectionString, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters)
        {
            SqlCommand cmd = new SqlCommand();
            using (SqlConnection conn = new SqlConnection(connectionString))
            {
                PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters);
                cmd.Parameters.Add("@maxNum", SqlDbType.Int).Direction = ParameterDirection.Output;
                cmd.ExecuteNonQuery();
               //这里value的值怎么老是null 难道存储过程 根本就没执行 if..else..语句?
                int val = Convert.ToInt32(cmd.Parameters["@maxNum"].Value);
                //现在运行到这里就报错了  这里value的值为null 所以转换报错
                return val;
            }
        }



求各位大侠帮忙分析下 sql语句 有没有问题
为什么@maxNum 的value 老是null

------解决方案--------------------
SQL code

use OperationData
go
create procedure Pro_UserMax
(
    @maxNum int output
)
as
begin
select @maxNum=MAX(Convert(int,PerNum)) from Sys_user
if @maxNum is null  --@maxNum为null的话就返回10001
select @maxNum = 10001
end

------解决方案--------------------
SQL code
create procedure dbo.Pro_UserMax
    @maxNum int output
AS

SET @maxNum=ISNULL((SELECT MAX(Convert(int,PerNum)) 
    FROM Sys_user),10001);