|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
对于insert操作,只需要把event_type改成DELETE_ROWS_EVENT;对于delete操作,改成WRITE_ROWS_EVENTerp|编码
ERP基本档案办理模块中完成多级分类档案ID号主动编码手艺(V1.0)
本存储历程完成了多级分类档案ID号主动编码手艺,本版本(V1.0)如今只完成每级3位的编码,
本版本的特性是:
n能够依据分歧的数据库表发生分歧的编码,到达通用化
n挪用时经由过程指定iIsSubNode要发生的节点编码是不是是子结点仍是兄弟节点来天生对应编码
举行挪用本存储历程时必要注重的是必要传送节点的条理(或是叫节点的深度)
别的下一个版本(V2.0)将依据用户自界说每级长度来完成更天真的主动编码手艺。
CREATEprocedureprcIDAutoGen
@vSourceIDvarchar(30),
@iDepthint,
@iIsSubNodeint,
@Tablevarchar(20),
@vIncrementvarchar(30)output
as
begin
declare@iLenint
declare@vTempIDvarchar(30)
declare@SQLStringnvarchar(500)
if@iIsSubNode=1
begin
set@iDepth=@iDepth+1
set@iLen=@iDepth*3
set@SQLString=NselectvIDfrom+@Table+wherevID=+ltrim(rtrim(@vSourceID))+
exec(@SQLString)
if@@rowcount>0
begin
select@vSourceIDasvIDinto#t
set@SQLString=Ninsert#tselectvIDfrom+@Table+wherevParentIDin(selectvIDfrom#t)andvIDnotin(selectvIDfrom#t)andiDepth=@iDepth
execsp_executesql@SQLString,N@iDepthint,@iDepth
if@@rowcount>0
begin
set@SQLString=Nselect@vTempID=isnull(max(vID),0)from#t
execsp_executesql@SQLString,N@vTempIDvarchar(30)output,@vTempIDoutput
set@SQLString=select@vIncrement=right(000+cast((cast(substring(@vTempID,1,@iLen)asdecimal(30,0))+1)asvarchar),@iLen)
execsp_executesql@SQLString,N@vIncrementvarchar(30)output,@vTempIDvarchar(30),@iLenint,@vIncrementout,@vTempID,@iLen
end
else
begin
select@vIncrement=ltrim(rtrim(@vSourceID))+001
end
end
else
begin
select@vIncrement=001
end
end
else
begin
set@iLen=len(ltrim(rtrim(@vSourceID)))
set@SQLString=NselectvIDfrom+@Table+wherevID=+ltrim(rtrim(@vSourceID))+
exec(@SQLString)
if@@rowcount>0
begin
set@SQLString=Nselect@vTempID=isnull(max(vID),0)from+@Table+wherevIDin(selectvIDfrom+@Table+whereiDepth=@iDepth)
execsp_executesql@SQLString,N@vTempIDvarchar(30)output,@iDepthint,@vTempIDoutput,@iDepth
set@SQLString=select@vIncrement=right(000+cast((cast(substring(@vTempID,1,@iLen)asdecimal(30,0))+1)asvarchar),@iLen)
execsp_executesql@SQLString,N@vIncrementvarchar(30)output,@vTempIDvarchar(30),@iLenint,@vIncrementout,@vTempID,@iLen
end
else
begin
select@vIncrement=001
end
end
end
用户创立基本档案时能够按以下相似表格局创立:
createtableCustomerClass(
vIDvarchar(30)constraintpkCustomerClassprimarykey,
vCustomerClassNamevarchar(40)NOTNULL,
vRemarksvarchar(80)NULL,
vParentIDvarchar(30)NULL,
iDepthIntNOTNULL
)
别的用户假如要在SQL查询剖析器举行测试时可用以下办法举行测试:
declare@valuevarchar(30)
execprcIDAutoGen,0,1,CustomerClass,@vIncrement=@valueoutput
select@value
insertcustomerclassvalues(001,a,a,null,1)
declare@valuevarchar(30)
execprcIDAutoGen001,1,1,CustomerClass,@vIncrement=@valueoutput
select@value
insertcustomerclassvalues(001001,b,b,001,2)
declare@valuevarchar(30)
execprcIDAutoGen001,1,1,CustomerClass,@vIncrement=@valueoutput
select@value
declare@valuevarchar(30)
execprcIDAutoGen001001,2,0,CustomerClass,@vIncrement=@valueoutput
select@value
顺次类推,在此不举(注重实行时三个语句一同实行)
(完)
mysql的prepare其实是本地PHP客户端模拟的,并没有根据你mysql的设置做字符集的调整。应该交与mysqlserver端做prepare,同时得调用mysql_set_character_set去操作,server才会按照字符集去做转义。 |
|