IDENTITY字段如何避开4? 有个字段是IDENTITY类型,同时也作为另一个条码编号的的来源,例如这个字段的数据是100,条码编号则是00000100,由于条码是给客户使用的,想要避开所有的4,也就是要直接修改IDENTITY中的值,最好是直接修改IDENTITY的编号计数器,请问有什么便捷的做法?IDENTITY字段如何避开4? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 IDENTITY可以更改,可以在插入的时候判断,如果是4,就加一。但是我觉得你可以直接取消IDENTITY,在一个临时表中先用IDENTITY获取,然后处理后插入到目标表中。 IDENTITY如何更改?若是可以更改的话,我可以预先取出IDENTITY,然后判断,若是带4就跳号,不过不清楚如何修改IDENTITY。条码编号要与这个ID相同,这样写起程序也较简单点,因为扫完条码后处处都可以用这个ID查询 DBCC CHECKIDENT(表名,reseed,1)这个是重置IDENTITY,你可以更改那个1,改成你希望接着下去的那个起点。比如DBCC CHECKIDENT(表名,reseed,5),但是这个值要用变量来获取当前的值,不能写死 Declare @ID IntDeclare @BarCode Varchar(16)Select @ID = IDENT_CURRENT('Table1') + (Select IDENT_INCR('Table1')) Select @IDWhile(CharIndex('4', Cast(@ID as Varchar(16))) > 0)Begin DBCC CHECKIDENT (Table1, RESEED, @ID) Select @ID = IDENT_CURRENT('Table1') + (Select IDENT_INCR('Table1')) EndSelect @IDSet @BarCode = Right('00000000000' + Ltrim(Rtrim(Cast(@ID as Varchar(10)))), 10)没勇气用DBCC这类指令,心里没底,这样可可靠性可以吗? While(CharIndex('4', Cast(@ID as Varchar(16))) > 0) 你这一句会不会查出不是你要的数据啊?比如00000403,这样也会找到的哦。而且你貌似逻辑有点问题,用if来判断就可以了 如果你坚持这种方案,就不要用IDENTITY了,4万时执行1万次CHECKIDENT不是闹着玩的,而应自己写序列函数:fn_next_id。 就是要去掉所有的4因此直接使用charindex4W的话也无所谓的,4W跳过之后就到5W了,也就是一次生成会慢点。不过多谢提醒,我没必要每次都去修改自动编号,若是遇到带4的,计算出一个不带4之后修改一次就可以了。 Declare @ID IntDeclare @BarCode Varchar(16)Select @ID = IDENT_CURRENT('Table1') + (Select IDENT_INCR('Table1')) Select @IDIf(CharIndex('4', Cast(@ID as Varchar(16))) > 0)Begin While(CharIndex('4', Cast(@ID as Varchar(16))) > 0) Begin Set @ID = @ID + 1 End Set @ID = @ID - 1 DBCC CHECKIDENT (Table1, RESEED, @ID) Select @ID = IDENT_CURRENT('Table1') + (Select IDENT_INCR('Table1')) EndSelect @IDSet @BarCode = Right('00000000000' + Ltrim(Rtrim(Cast(@ID as Varchar(10)))), 10) 那你还不如在插入之前把4替换掉。不过我还是觉得取消IDENTITY会比较好。只要算法保证了自增,那也还是可以不依赖SQLServer提供的特性来实现的。 SQL高手进来帮忙看看!!!!!!!!!!!!!!!!!!!!! 在SqlServer2008(查询)中,如何把同列同值的数据中,添加一个字段表示成第几行? 数据分析SQL实现 请高手解答bcp命令问题! sql定时导数据 菜鸟问:SQLServer和MySQL有什么区别、什么联系 检索在一个字段中不含有"ABC"的怎么写 求助,不能更新表结构,而且不能改名,不能被删除。执行操作时,MS SQL界面就进入没有响应. 急急!!!请高手指点,如何导出表格?!! 救救孩子 sql疑难查询 SQL 单元格数据分割
IDENTITY如何更改?
若是可以更改的话,我可以预先取出IDENTITY,然后判断,若是带4就跳号,不过不清楚如何修改IDENTITY。条码编号要与这个ID相同,这样写起程序也较简单点,因为扫完条码后处处都可以用这个ID查询
Declare @ID Int
Declare @BarCode Varchar(16)Select @ID = IDENT_CURRENT('Table1') + (Select IDENT_INCR('Table1'))
Select @ID
While(CharIndex('4', Cast(@ID as Varchar(16))) > 0)
Begin
DBCC CHECKIDENT (Table1, RESEED, @ID)
Select @ID = IDENT_CURRENT('Table1') + (Select IDENT_INCR('Table1'))
End
Select @ID
Set @BarCode = Right('00000000000' + Ltrim(Rtrim(Cast(@ID as Varchar(10)))), 10)没勇气用DBCC这类指令,心里没底,这样可可靠性可以吗?
如果你坚持这种方案,就不要用IDENTITY了,4万时执行1万次CHECKIDENT不是闹着玩的,而应自己写序列函数:fn_next_id。
因此直接使用charindex
4W的话也无所谓的,4W跳过之后就到5W了,也就是一次生成会慢点。
不过多谢提醒,我没必要每次都去修改自动编号,若是遇到带4的,计算出一个不带4之后修改一次就可以了。
Declare @ID Int
Declare @BarCode Varchar(16)Select @ID = IDENT_CURRENT('Table1') + (Select IDENT_INCR('Table1'))
Select @ID
If(CharIndex('4', Cast(@ID as Varchar(16))) > 0)
Begin
While(CharIndex('4', Cast(@ID as Varchar(16))) > 0)
Begin
Set @ID = @ID + 1
End
Set @ID = @ID - 1
DBCC CHECKIDENT (Table1, RESEED, @ID)
Select @ID = IDENT_CURRENT('Table1') + (Select IDENT_INCR('Table1'))
End
Select @ID
Set @BarCode = Right('00000000000' + Ltrim(Rtrim(Cast(@ID as Varchar(10)))), 10)