--创建的自定义函数
CREATE function f_GetExhID(@Meeting_ID varchar(50),@Submint_PositionID varchar(50))
returns varchar(50)
as
begin
declare @ExhibitID varchar(50) select @ExhibitID=max(ExhibitID)
from Meeting_CoSubmit 
where PositionID=@Submint_PositionID And Verify=1 And Meeting_ID=@Meeting_ID
return(
case when @ExhibitID is null then @Submint_PositionID+'001'
else @Submint_PositionID+right(1001+cast(right(@ExhibitID,3) as int),3) end
)
end
go--调用:
select dbo.f_GetExhID('公司甲','A')

解决方案 »

  1.   

    CREATE function f_GetExhID(@Meeting_ID varchar(50),@Submint_PositionID varchar(50))
    returns varchar(50)
    as
    begin
    declare @PositionID varchar(50),@ExhibitID varchar(50) select @ExhibitID=ltrim(rtrim(min(ExhibitID)))
    from Meeting_CoSubmit where PositionID=@Submint_PositionID
    And Verify=1 And Meeting_ID=@Meeting_ID
    If @ExhibitID is null
             --当没有纪录的的时候从001开始分配
    Set @ExhibitID=@Submint_PositionID+'001'
    else
    Begin
             --在有记录的时候,在原有的值上+1
             --????
             Set @ExhibitID=left(@ExhibitID,1)+right('000'+cast(cast(right(@ExhibitID,3) as int)+1 as varchar(10)),3)
    End
    return(@ExhibitID)
    end
      

  2.   

    zjcxc(邹建):select @ExhibitID=max(ExhibitID)
     这句有错,我的ExhibitID是VARCHAR,不是INT,它的值是'A001','A002','A003'这样的值。
      

  3.   

    你测试过吗?谁告诉你max函数不能用于varchar?
      

  4.   

    请问zjcxc(邹建) 兄:
    如果是max(varchar)
    返回的是什么含义,谢谢!
      

  5.   

    返回varchar中最大值嘛.就是order by varchar desc中的第一条
      

  6.   

    服务器: 消息 245,级别 16,状态 1,过程 f_GetExhID,行 8
    将 varchar 值 '公司甲' 转换为数据类型为 int 的列时发生语法错误。
    我试了呀~
      

  7.   

    字段 字段类型及大小 字段说明
    CoSub_ID int 主键(自动增量)
    Meeting_ID int 双选会ID,与上表对应
    Co_UserName varchar/50 企业ID(对应企业的详细信息)
    PositionID varchar/50 提交的区位
    ExhibitID varchar/50 分配的展位
    Verify int 是否审核通过 
    我的表结构
      

  8.   

    我也问一下,假如有三个字段id name ,sort
    select max(name) from a只会返回一个列,如果还想同时显示max(name)的id,sort
    这样
    select id,max(name),sort from a就肯定会错,那一般怎么写,能满足这个要求,而且是最好的写法!
      

  9.   

    那是你自己的错,你看清楚:这是你的表结构:
    Meeting_ID int 双选会ID,与上表对应这是你定义的参数:
    @Meeting_ID varchar(50)
    --这是你自己写的调用:
    select dbo.f_GetExhID('公司甲','A')
      

  10.   

    呵呵,就是啊,前后矛盾!
    zjcxc(邹建) 兄,看看我的吧!:)
      

  11.   

    而引起错误的语句:And Meeting_ID=@Meeting_ID
    这些可都是你自己写的你自己搞错了数据类型,而不是我函数的错.
    这个你自己解决吧,查询出"公司甲"的 Meeting_ID 做为参数传过去就行了,函数根本就没错.
      

  12.   

    select * from cc where name in(select max(name) from cc)
    还有比这好的么?
      

  13.   

    SORRY SORRY,我原来想传那个参数的,后来忘了改了:)对不起啊~~~
      

  14.   

    skyboy0720(飞):
    select * from a where name=(select max(name) from a)
    可能返回name相同的多条记录