莫相离 发表于 2015-1-16 22:29:14

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才会按照字符集去做转义。

莫相离 发表于 2015-1-19 14:33:08

光写几个SQL实在叫无知。

变相怪杰 发表于 2015-1-25 21:27:23

是要和操作系统进行Socket通讯的场景。否则建议慎重!

第二个灵魂 发表于 2015-2-4 03:54:08

现在是在考虑:如果写到服务器端,我一下搞他个10个存储过程导过去,那久之服务器不就成垃圾箱了吗?即便优化了我的中间层.

蒙在股里 发表于 2015-2-9 15:07:09

可能有的朋友会抱怨集成的orderby,其实如果使用ranking函数,Orderby是少不了的。如果担心Orderby会影响效率,可以为orderby的字段建立聚集索引,查询计划会忽略orderby操作(因为本来就是排序的嘛)。

金色的骷髅 发表于 2015-2-27 07:48:24

每天坚持做不一样的是,认真做笔录,定时复习。一个月你就可以有一定的收获。当然如果你想在sql方面有一定的造诣,你少不了需要看很多很多的书籍了。

谁可相欹 发表于 2015-3-8 23:49:28

SP4是一个累积性的ServicePack,包含自以前的ServicePack发布以来所有的修补程序(包括MS03-031安全公告)。

若相依 发表于 2015-3-16 18:52:27

这一点很好的加强了profiler的功能。但是提到profiler提醒大家注意一点。windows2003要安装sp1补丁才能启动profiler。否则点击没有反应。

仓酷云 发表于 2015-3-23 00:14:41

多走走一此相关论坛,多看一些实例开发,多交流0经验,没什么的,我也是刚学没多久!加油
页: [1]
查看完整版本: MSSQL网站制作之ERP基本档案办理模块中完成多级分类档案...