本帖最后由 ldjssoft 于 2011-07-09 13:52:50 编辑

解决方案 »

  1.   


    declare @id int
    set @id = 12
    select 'P'+convert(varchar(8),getdate(),112) + right(10000+@id,4)
      

  2.   


    declare @id int
    set @id = 1
    select 'P'+convert(varchar(8),getdate(),112) + right(10000+@id,4)/*****************-----------------
    P201107090001(1 行受影响)
      

  3.   

    不好意思,谢谢楼上的朋友们,我发现这样会有问题。如果我用日期加id,如果id以后上万了,好像就不能用这个方法了,请问真正的凭证号要怎么生成的呢
      

  4.   

    日期变了,id再从1开始
    P201107080001、P201107080002......P201107090001、P201107090002......
      

  5.   


    declare @id int
    set @id = 1
    select 'P'+convert(varchar(8),getdate(),112) + right('0000000000'+ltrim(@id),10)  -- 共10位
      

  6.   

    明白了,那我是不应该在前面加日期的,直接 用前缀加id取0就可以了吧。AcHerat 美女,如果我 是取 UserInfo表里面的id字段,应该怎么写呢?
      

  7.   


    use tempdb
    GODeclare @mantissa int
    Set @mantissa=1Select N'P'+Convert(nvarchar(8),getdate(),112)+replicate('0',4-len(@mantissa))+rtrim(@mantissa) AS [凭证号]/*
    凭证号
    ----------------
    P201107090001
    */是取 UserInfo表里面的id字段,应该怎么写
    Select 
    N'P'+Convert(nvarchar(8),getdate(),112)+replicate('0',4-len(ID))+rtrim(ID) AS [凭证号]
    From UserInfo
      

  8.   


    select 'P'+convert(varchar(8),getdate(),112) + right('0000000000'+ltrim(id),10)  -- 共10位
    from tb
      

  9.   

    补4个0后再用right函数截取后面4位,
    或者用楼上的,10000+id转为字符串后再截取后面4位
      

  10.   

    AcHerat,您的语句返回了当前所有行的凭证号,我只要生成最新的一个凭证号,用于插入新的数据,我改成了这样可以实现效果,不知道批量插入几千条数据的时候生成效率好不好
    select top 1 'P'+ right('00000000'+ltrim(id+1),8)  -- 共10位
    from Userinfo order by id desc