仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 864|回复: 8
打印 上一主题 下一主题

[学习教程] MSSQL教程之体系开辟过中,2分钟以内弄定命据字典表...

[复制链接]
谁可相欹 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:28:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
Memory所有数据置于内存的存储引擎,拥有极高的插入,更新和查询效率。但是会占用和数据量成正比的内存空间。并且其内容会在Mysql重新启动时丢失数据



体系开辟过中,数据字典表的更新


你们是不是发明,

在体系开辟过程当中,你的数据库在一直的改动,最后发给每一个开辟职员的数据表界说,

已变得改头换面了,假如你这个这个项目开辟的卖力人,上面的人先生说,怎样数据表又变了

怎样也欠亨知我们呢,偶然候事情忙碌,也纷歧定可以关照到一切的开辟职员。

为此,我专程作了一个主动化的工具,每当数据表又年夜的变化时,你不必要再次往修正原始数据字典文档了

你只需依照我的步骤来做,包管这统统在2分钟以内,帮你弄定命据字典文档的更新。

注重本办法,只针对MSSQLServer2000。很遗憾,这统统,还没有做到完整主动化,谁有这个乐趣,完美它,我信任到时分,这统统会在1分钟以内弄定。
1.在你的体系数据库中,创立以下存储历程
该存储历程是猎取数据字典信息



createProcedureGetAllTableInfoAs

begin

DECLARE@au_idvarchar(11),@strNamevarchar(50),@Tidint,@strOwnervarchar(50)



--猎取一切的用户表信息

DECLAREAll_TablesCURSOR

FORselectconvert(varchar,Name),IDfromsysobjectswherextypE=UorderbyName



CreateTable#ColInfo

(

TNamevarchar(50),--表称号

ColNamevarchar(50),--列称号

REMARKsql_variant,--正文

Typevarchar(50),--数据范例

DefaultValuevarchar(255),--缺省值

IsAllowNullvarchar(10),--是不是同意为空

IsPrimaryKeychar(2)--是不是为主键,用*标志

)

--主键信息

CreateTable#PkInfo

(

TABLE_QUALIFIERvarchar(50),

TABLE_OWNERvarchar(50),

TABLE_NAMEvarchar(50),

COLUMN_NAMEvarchar(50),

KEY_SEQint,

PK_NAMEvarchar(50)

)



set@strOwner=user_name()



OPENAll_Tables

FETCHNEXTFROMAll_Tablesinto@strName,@Tid

while@@FETCH_STATUS=0

begin

--拔出表及其正文信息

InsertInto#ColInfo

SELECT@StrName,,isnull(Value,),,,,

FROM(select@strNameTName)Aleftjoin

::fn_listextendedproperty(MS_Description,NUSER,Ndbo,NTable,@strName,NULL,NULL)--表的正文信息

ON1=1

--拔出列信息

insertinto#ColInfo

select@strName,C.nameCName,convert(varchar,R.value)+(casec.statuswhen0x80thenchar(13)+char(10)+主动增加列elseend),

(casewhen(C.xtype>=34andC.xtype<=58)orC.xtypein(61,98,99,104,127,189)thenT.namewhenc.xtypein(59,60,106,108,122)thenT.name+(+convert(varchar,C.xprec)+,+convert(varchar,C.xscale)+)elseT.name+(+convert(varchar,C.length)+)end),

isnull(Def.text,),

caseisnullablewhen1then是else否end,



from(systypesT

innerjoin

(

syscolumnsC

leftjoin

SysCommentsDef

onC.cdefault=Def.idand1=Def.colid

)

onT.xtype=C.xtypeandT.xusertype=C.xusertype

)

leftjoin

::fn_listextendedproperty(MS_Description,NUSER,Ndbo,NTable,@strName,NColumn,NULL)R--列的正文信息

onconvert(varchar,R.objname)=convert(varchar,C.Name)

whereC.id=object_id(@strName)





insertinto#PkInfoEXEC[dbo].[sp_pkeys]@strName,@strOwner,DEFAULT



fetchnextfromAll_Tablesinto@strName,@Tid

end



--更新主键信息

update#ColInfo

setIsPrimaryKey=是

from#PkInfo

where#PkInfo.TABLE_NAME=#ColInfo.TNameand#PkInfo.COLUMN_NAME=#ColInfo.ColName



CloseAll_Tables

DEALLOCATEAll_Tables



select%%%%ObjName,REMARK,Col1,Col2,Col3,Col4,TName,0flag

from#ColInfo

whereColName=

union

select表名:+TName,REMARK,,,,,TName,1flag

from#ColInfo

whereColName=

union

select列名,正文,数据范例,缺省值,是不是同意空,主键,TName,2

from#ColInfo

whereColName=

union

selectColName,REMARK,Type,DefaultValue,IsAllowNull,

IsPrimaryKey,TName,3

from#ColInfo

whereColName



orderby7,8,3



droptable#PkInfo

droptable#ColInfo

end


2.MSSQLSever供应的查询剖析器中,
ExecGetAllTableInfo
3.将查询了局信息,复制到MSExcelSheet中4.在MSExcelSheet中,删撤除最初两列5.全选Sheet信息,复制到MSWord中,实行上面Word宏命令
SubMacro1()



Macro1Macro

宏在2004-3-12由徐侠君录制



A:

Selection.Find.ClearFormatting

WithSelection.Find

.Text="%%%%"

.Replacement.Text=""

.Forward=True

.Wrap=wdFindContinue

.Format=False

.MatchCase=False

.MatchWholeWord=False

.MatchByte=True

.MatchWildcards=False

.MatchSoundsLike=False

.MatchAllWordForms=False

EndWith

IfSelection.Find.ExecuteThen



Selection.DeleteUnit:=wdCharacter,Count:=1



Selection.EndKeyUnit:=wdLine,Extend:=wdExtend



Selection.EndKeyUnit:=wdLine,Extend:=wdExtend

Selection.EndKeyUnit:=wdLine,Extend:=wdExtend

Selection.EndKeyUnit:=wdLine,Extend:=wdExtend

Selection.EndKeyUnit:=wdLine,Extend:=wdExtend

Selection.EndKeyUnit:=wdLine,Extend:=wdExtend



Selection.Cells.Merge

Selection.MoveDownUnit:=wdLine,Count:=1

Selection.EndKeyUnit:=wdLine,Extend:=wdExtend

Selection.EndKeyUnit:=wdLine,Extend:=wdExtend

Selection.MoveLeftUnit:=wdCharacter,Count:=1,Extend:=wdExtend

Selection.Font.Bold=wdToggle

Selection.MoveRightUnit:=wdCharacter,Count:=1

Selection.SelectCell

Selection.MoveRightUnit:=wdCharacter,Count:=4,Extend:=wdExtend

Selection.Cells.Merge

Selection.MoveDownUnit:=wdLine,Count:=1

Selection.HomeKeyUnit:=wdLine,Extend:=wdExtend

Selection.MoveLeftUnit:=wdCharacter,Count:=2

Selection.HomeKeyUnit:=wdLine

Selection.EndKeyUnit:=wdLine,Extend:=wdExtend

Selection.EndKeyUnit:=wdLine,Extend:=wdExtend

Selection.EndKeyUnit:=wdLine,Extend:=wdExtend

Selection.EndKeyUnit:=wdLine,Extend:=wdExtend

Selection.EndKeyUnit:=wdLine,Extend:=wdExtend

Selection.EndKeyUnit:=wdLine,Extend:=wdExtend

Selection.Font.Bold=wdToggle

Selection.MoveDownUnit:=wdLine,Count:=2

GoToA

Else

MsgBox"修正各是乐成"

EndIf



EndSub


1.假如还发明那些中央不切合你的请求,请本人完美修复过程包含最多4个阶段,在下面描述。在你开始前,你应该cd到数据库目录和检查表文件的权限,确保他们可被运行mysqld的Unix用户读取(和你,因为你需要存取你正在检查的文件)。如果它拒绝你修改文件,他们也必须是可被你写入的。
莫相离 该用户已被删除
沙发
发表于 2015-1-19 14:22:32 | 只看该作者
不好!如果出了错;不好调试;不好处理!其实web开发将代码分为3层:web层;业务逻辑层和数据访问层;一般对数据库的操作都在数据访问层来做;这样便于调试和维护!而且将来如果是换了数据库的话;你只需要改数据层的代码;其他层的基本可以不变!要是你在jsp中直接调用sql数据库;那么如果换了数据库呢?岂不都要改?如果报了异常呢?怎么做异常处理?
简单生活 该用户已被删除
板凳
发表于 2015-1-25 21:49:19 | 只看该作者
一个是把SQL语句写到客户端,可以使用DataSet进行加工;
地板
发表于 2015-2-4 06:14:26 | 只看该作者
你觉得我的非分区索引无法对起子分区,你可以提醒我一下呀!没有任何的提醒,直接就变成了非分区表。不知道这算不算一个bug。大家也可以试试。
柔情似水 该用户已被删除
5#
发表于 2015-2-9 17:20:37 | 只看该作者
入门没那么困难,精通没那么容易
若天明 该用户已被删除
6#
发表于 2015-2-27 12:45:53 | 只看该作者
所以你总能得到相应的升级版本,来满足你的需求。
小妖女 该用户已被删除
7#
发表于 2015-3-9 04:12:21 | 只看该作者
所以你总能得到相应的升级版本,来满足你的需求。
兰色精灵 该用户已被删除
8#
发表于 2015-3-16 20:36:53 | 只看该作者
对于微软系列的东西除了一遍遍尝试还真没有太好的办法
灵魂腐蚀 该用户已被删除
9#
发表于 2015-3-23 02:18:22 | 只看该作者
相信各位对数据库和怎么样学习数据库都有一些经验和看法,也会有人走了一些弯路总结出自己的经验来,希望大家能把各自的看法和经验拿出来分享,给别人一份帮助,给自己一份快乐
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-22 23:29

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表