none
自动生成插入数据 RRS feed

  • 问题

  • sqlserver能不能实现这样的功能呢?
    有一int数据作为流水号存在最好能自动生成,值是根据此字段数据的最大值+1生成,格式类似于200900001,200900002......(前4位代表年份)。我想实现的是:能否插入有个判断语句,判断此数据的前4位(例子中的2009)是否和服务器时间的年份相同,如果不同的话(或为空,就是数据库中的第一条记录)的时候,重构数据为:年度+00001(例如到明年就是201000001)。谢谢了先
    2009年12月17日 7:26

答案

  • sqlserver能不能实现这样的功能呢?
    有一int数据作为流水号存在最好能自动生成,值是根据此字段数据的最大值+1生成,格式类似于200900001,200900002......(前4位代表年份)。我想实现的是:能否插入有个判断语句,判断此数据的前4位(例子中的2009)是否和服务器时间的年份相同,如果不同的话(或为空,就是数据库中的第一条记录)的时候,重构数据为:年度+00001(例如到明年就是201000001)。谢谢了先

    可以用用户定义函数实现
    1, 创建函数,自动取年份并乘以100000,search table取最大ID与新生成的ID比较。如果新生成的ID大,则返回新生成的ID+1,否则返回当前最大ID+1
    2, 创建表的时候将default value绑定到你定义的函数上就行了!
    • 已标记为答案 Abbey.G 2009年12月18日 4:06
    2009年12月17日 15:43
  • create function MyYear(@TempId int) returns nvarchar(200) with schemabinding as
    begin
    --流水号组合,自己想想
     return N'ABC'+@TempId--如果是表的话要加架构如:dbo
    end
    go

    create table tTemp
    (
     TempId int identity(1,1) not null primary key,
     TempCode as dbo.MyYear(TempId) persisted
    )

    • 已标记为答案 Abbey.G 2009年12月18日 4:06
    2009年12月17日 18:39

全部回复

  • 这种只有自己判断生成了 不能通过自增长来实现了
    可以写个存储过程来实现你的判断,然后插入相关数据


    Wenn ich dich hab’,gibt es nichts, was unerträglich ist.坚持不懈!My blog~~~
    2009年12月17日 7:38
  • 如果用触发器来实现可不可以啊?
    2009年12月17日 7:57
  • 不用触发器也可以

    create table tTemp
    (
     TempId int identity(1,1) not null primary key,
     TempCode as (TempId+1/*或者自定义表值函数*/) persisted
    )

    自己改一改
    • 已标记为答案 Abbey.G 2009年12月17日 14:23
    • 取消答案标记 Abbey.G 2009年12月17日 14:32
    2009年12月17日 10:32
  • 能不能给点具体的参考资料,单单就这样我理解不了,谢谢了

    2009年12月17日 14:32
  • sqlserver能不能实现这样的功能呢?
    有一int数据作为流水号存在最好能自动生成,值是根据此字段数据的最大值+1生成,格式类似于200900001,200900002......(前4位代表年份)。我想实现的是:能否插入有个判断语句,判断此数据的前4位(例子中的2009)是否和服务器时间的年份相同,如果不同的话(或为空,就是数据库中的第一条记录)的时候,重构数据为:年度+00001(例如到明年就是201000001)。谢谢了先

    可以用用户定义函数实现
    1, 创建函数,自动取年份并乘以100000,search table取最大ID与新生成的ID比较。如果新生成的ID大,则返回新生成的ID+1,否则返回当前最大ID+1
    2, 创建表的时候将default value绑定到你定义的函数上就行了!
    • 已标记为答案 Abbey.G 2009年12月18日 4:06
    2009年12月17日 15:43
  • create function MyYear(@TempId int) returns nvarchar(200) with schemabinding as
    begin
    --流水号组合,自己想想
     return N'ABC'+@TempId--如果是表的话要加架构如:dbo
    end
    go

    create table tTemp
    (
     TempId int identity(1,1) not null primary key,
     TempCode as dbo.MyYear(TempId) persisted
    )

    • 已标记为答案 Abbey.G 2009年12月18日 4:06
    2009年12月17日 18:39