表1中的a列、b列如下:
a               b
20051233        12
20051233       254
20052512        21
20052642       455
20052314         5
20060001        11
20060002        14
20060003        17
20060004        18
第一个问题
现在我想把a列变成identity属性的标识列,可是a列中20060001以前的数据有重复,使转换出现了问题。现在这些数据(指20060001之前的数据)我可以不要,可以任意修改,可是我该怎样修改20060001以前的a列数据,以使a列可以转换成identity属性呢。
第二个问题
如果a列数据到了20069852,我想把下一个数据变成20070001,以后继续递增,我该怎么办。我用DBCC CHECKIDENT (Ta, RESEED, 20070000)对吗?这是不是唯一的方法或者是最好的方法?

解决方案 »

  1.   

    --触发器解决方案CREATE TRIGGER TG ON tb
    instead of inserted
    AS
    declare @a int
    select @a=cast(max(a) as int)+1 from tb
    if @a=20069852
    insert into tb (a,b)
    select '20070001',a.b from inserted a
    else
    insert into tb (a,b)
    select cast(@a as nvarchar(100)),a.b from inserted a
      

  2.   

    谢谢,第二个问题用DBCC CHECKIDENT (Ta, RESEED, 20070000)是不是更方便?
    还有第一个问题,这个是关键啊?难道一个要先把20060001以前的数据删除了再加工后,再导入回去吗?有没有就地加工的方法?以前的编号怎么处理都行,只要能转换成identity属性。