金色的骷髅 发表于 2015-1-16 22:30:39

MYSQL网页设计MS SQL新旧库数据字典对照剧本

如果表有1000个记录,通过索引查找记录至少要比顺序扫描记录快100倍。对照|剧本|数据/*MSSQL新旧库数据字典对照剧本*/--说明1:新旧库必需在统一数据库服务器统一实例中,最好以Sa身份登进。
--说明2:本剧本可作为体系晋级改革,失掉相干信息后作数据迁徙之用。
declare@iint
set@i=4/*说明3:1为要失掉新库增添的数据字典信息;
2为要失掉旧库多出的数据字典信息;
3为要失掉新库增添的表的数据字典信息;
4为要失掉旧库多出的表的数据字典信息*/

usetemp--翻开旧库
SELECTsysobjects.nameAS,CASEWHENCAST(sysproperties.ASvarchar)
ISNULLTHENELSECAST(sysproperties.ASvarchar)ENDAS表申明,
syscolumns.nameASfield,CASEWHENCAST(properties.ASvarchar)ISNULL
THENELSECAST(properties.ASvarchar)ENDAS字段申明,
systypes.nameAStype,syscolumns.length,
ISNULL(COLUMNPROPERTY(syscolumns.id,syscolumns.name,Scale),0)
AS小数位数,syscolumns.isnullableASisnull,
CASEWHENsyscomments.textISNULL
THENELSEsyscomments.textENDAS,
CASEWHENCOLUMNPROPERTY(syscolumns.id,syscolumns.name,IsIdentity)
=1THEN√ELSEENDAS标识,CASEWHENEXISTS
(SELECT1
FROMsysobjects
WHERExtype=PKANDnameIN
(SELECTname
FROMsysindexes
WHEREindidIN
(SELECTindid
FROMsysindexkeys
WHEREid=syscolumns.idANDcolid=syscolumns.colid)))
THEN√ELSEENDAS主键into#old
FROMsyscolumnsINNERJOIN
sysobjectsONsysobjects.id=syscolumns.idINNERJOIN
systypesONsyscolumns.xtype=systypes.xtypeLEFTOUTERJOIN
syspropertiespropertiesONsyscolumns.id=properties.idAND
syscolumns.colid=properties.smallidLEFTOUTERJOIN
syspropertiesONsysobjects.id=sysproperties.idAND
sysproperties.smallid=0LEFTOUTERJOIN
syscommentsONsyscolumns.cdefault=syscomments.id
WHERE(sysobjects.xtype=U)

useaccdb--翻开新库
SELECTsysobjects.nameAS,CASEWHENCAST(sysproperties.ASvarchar)
ISNULLTHENELSECAST(sysproperties.ASvarchar)ENDAS表申明,
syscolumns.nameASfield,CASEWHENCAST(properties.ASvarchar)ISNULL
THENELSECAST(properties.ASvarchar)ENDAS字段申明,
systypes.nameAStype,syscolumns.length,
ISNULL(COLUMNPROPERTY(syscolumns.id,syscolumns.name,Scale),0)
AS小数位数,syscolumns.isnullableASisnull,
CASEWHENsyscomments.textISNULL
THENELSEsyscomments.textENDAS,
CASEWHENCOLUMNPROPERTY(syscolumns.id,syscolumns.name,IsIdentity)
=1THEN√ELSEENDAS标识,CASEWHENEXISTS
(SELECT1
FROMsysobjects
WHERExtype=PKANDnameIN
(SELECTname
FROMsysindexes
WHEREindidIN
(SELECTindid
FROMsysindexkeys
WHEREid=syscolumns.idANDcolid=syscolumns.colid)))
THEN√ELSEENDAS主键into#new
FROMsyscolumnsINNERJOIN
sysobjectsONsysobjects.id=syscolumns.idINNERJOIN
systypesONsyscolumns.xtype=systypes.xtypeLEFTOUTERJOIN
syspropertiespropertiesONsyscolumns.id=properties.idAND
syscolumns.colid=properties.smallidLEFTOUTERJOIN
syspropertiesONsysobjects.id=sysproperties.idAND
sysproperties.smallid=0LEFTOUTERJOIN
syscommentsONsyscolumns.cdefault=syscomments.id
WHERE(sysobjects.xtype=U)

if@i=1
begin
selectn.*--新库与旧库比拟较后新库增添的数据字典信息
from#newnleftjoin#oldoonn.=o.andn.field=o.fieldwhereo.isnull
oro.fieldisnullorderbyn.,n.field
end
else
begin
if@i=2
begin
selecto.*--新库与旧库比拟较后旧库多出的数据字典信息
from#newnrightjoin#oldoonn.=o.andn.field=o.fieldwheren.isnull
orn.fieldisnullorderbyo.,o.field
end
else
begin
if@i=3
begin
select*--新库与旧库比拟较后新库增添的表的数据字典信息
from#newwhereall(selectfrom#old)orderby,field
end
else
begin
if@i=4
begin
select*--新库与旧库比拟较后旧库多出的表的数据字典信息
from#oldwhereall(selectfrom#new)orderby,field
end
else
begin
select堕落啦
end
end
end
end
droptable#old
droptable#new

任何规模的组织都可能受益于外包服务,并在一个标准化和优化的平台上统一其数据库管理任务。基于其本身的特性,DBaaS提供了敏捷和高效的数据库服务,它可以支持多变的需求。

精灵巫婆 发表于 2015-1-19 15:51:31

但换公司用MSSQL2K感觉自己好像根本就不了解MSSQL。什么DTS触发器以前根本没用过。

若相依 发表于 2015-1-28 07:39:12

varchar(max)\\\\nvarchar(max)类型的引入大大的提高了编程的效率,可以使用字符串函数对CLOB类型进行操作,这是一个亮点。

海妖 发表于 2015-2-5 18:03:46

个人感觉没有case直观。而且默认的第三字段(还可能更多)作为groupby字段很容易造成新手的错误。

冷月葬花魂 发表于 2015-2-13 04:09:48

光写几个SQL实在叫无知。

再见西城 发表于 2015-3-3 14:20:20

原来的计算字段其实和虚拟字段很像。只是管理方面好了而已,性能方面提高不多。但是SQL2005提供了计算字段的持久化,这就提高了查询的性能,但是会加重insert和update的负担。OLTP慎用。OLAP可以大规模使用。

不帅 发表于 2015-3-11 11:27:31

原理很简单,对要求长时间计算某一时间点的报表生成和防用户操作错误很有帮助。但是比起Oracle10g的闪回技术还是细粒度不够。可惜!

谁可相欹 发表于 2015-3-18 08:52:32

大家注意一点。如下面的例子:

再现理想 发表于 2015-3-25 15:46:10

一个百万级别的基本信息表A,一个百万级别的详细记录表B,A中有个身份证id,B中也有身份id;先要找出A中在B的详细记录。
页: [1]
查看完整版本: MYSQL网页设计MS SQL新旧库数据字典对照剧本