日期:2014-05-16 浏览次数:20577 次
转自:http://www.cnblogs.com/DelphiFan/archive/2009/07/26/1645572.html
?
最近客户要求在货品资料中生成商品条码(即EAN13,国际商品条码),虽然系统中有商品条码生成的工具,但是对不上号,根本无法使用,客户的货品资料已经有部分有条码,更重要的是客户要求生成商品条码的货品无法正常筛选出来(比如:GW开头,或者是GM开头,而且要求的是GW和GM后面全是数字的货品才要求生成),客户又急着用,没有办法的情况下,就自己动手写了一个小工具,虽然客户无法使用,但是对于维护客户的商品条码生成,确是相当的方便,现记录下,以便将来查看:
生成EAN13条码的SQL函数代码:
create function dbo.EAN13(@value varchar(13)) returns varchar(13) as begin declare @s1 int ,@s2 int ,@s3 int declare @t table (id int identity(1,1),b bit) insert into @t(b) select top 13 1 from syscolumns set @value='0'+reverse(@value) select @s1=sum(cast(substring(@value,id,1) as int)) from @t a where len(@value)>=id and id%2=0 set @s1=@s1*3 select @s2=sum(cast(substring(@value,id,1) as int)) from @t a where len(@value)>=id and id>=3 and id%2=1 set @s3=right(@s1+@s2,1) return left(reverse(@value),12)+ltrim(10-case @s3 when '0' then '10' else @s3 end) end go
函数调用:
select dbo.ean13(694386035966) 返回值:6943860359663
在程序中执行时,可以手工写入SQL语句,这样,可以自由的提出要生成的货品资料,例如:
select code,name,standardcode from goods where (patindex('GW[0-9]%',Code)>0 or patindex('GM[0-9]%',Code)>0) and
(standardcode is? null)
动态的指定SQL语句,相当方便。