MSSQL网站制作之ERP基本档案办理模块中完成多级分类档案...
对于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才会按照字符集去做转义。 光写几个SQL实在叫无知。 是要和操作系统进行Socket通讯的场景。否则建议慎重! 现在是在考虑:如果写到服务器端,我一下搞他个10个存储过程导过去,那久之服务器不就成垃圾箱了吗?即便优化了我的中间层. 可能有的朋友会抱怨集成的orderby,其实如果使用ranking函数,Orderby是少不了的。如果担心Orderby会影响效率,可以为orderby的字段建立聚集索引,查询计划会忽略orderby操作(因为本来就是排序的嘛)。 每天坚持做不一样的是,认真做笔录,定时复习。一个月你就可以有一定的收获。当然如果你想在sql方面有一定的造诣,你少不了需要看很多很多的书籍了。 SP4是一个累积性的ServicePack,包含自以前的ServicePack发布以来所有的修补程序(包括MS03-031安全公告)。 这一点很好的加强了profiler的功能。但是提到profiler提醒大家注意一点。windows2003要安装sp1补丁才能启动profiler。否则点击没有反应。 多走走一此相关论坛,多看一些实例开发,多交流0经验,没什么的,我也是刚学没多久!加油
页:
[1]