时,数据库设计过程中经常会添加和删除数据库对象,这会在数据库中留下很多碎片,无法有效利用磁盘空间,文件会逐渐增大。这有点像文件系统进行多次增删改查操作,会造成文件碎片,浪费磁盘空间,降低读写效率。可以使用Access提供的压缩数据库的工具,它会重新安排数据库文件在磁盘中的存储位置,释放磁盘空间,通常文件的容量会减少到原来大小的几分之一。Access内置了压缩数据库的功能,但是Access文件的增长非常夸张。它可能会将文件大小增加十倍,使其在硬盘上变得臃肿。这似乎是Microsoft的常见问题。你可以打开一个Word文件,加几个空格删掉(文件实际内容没变),然后保存,你会发现比以前大了,比如一个45k的文件,经过几个这样的changes文件大小变为49.5k→58.5k→68.5k。我真的不知道文件中存储了什么。所以我们有理由怀疑Access数据库压缩的效果。一年前自己编了一个统计系统,大概花了3个月时间,几乎天天修改,几天压缩一次。最后Mdb文件20M大小,连Mde文件都超过8M。我很高兴。我以为我可以自己设计大型程序。今年这个程序要升级了,但是我把源程序弄丢了(心疼),于是下定决心,重新编了一个。功能几乎没有变化,最后的mdb文件大小只有2M多,我的天!我简直不敢相信!原来Access文件越改越压缩,文件越大,什么逻辑啊!还有,如果你的mdb文件太大的话,可以新建一个空数据库,把原来数据库的内容全部导入到这个新数据库里,再看看,文件肯定小很多。我做了一个实验,一个640k的mdb文件,压缩后数据库变成240k,然后新建一个数据库,全部导入,只有60k。当然,不管上面用什么方法,mdb文件还是很松散的,Winzip可以多次压缩,所以如果想把程序妹子送给朋友的话,记得最后用Winzip压缩一下,以免浪费您的时间话费!(来源:TwinsStudio)随着用户对企业级高性能数据库需求的增加,用户往往不得不从MicrosoftAccessJet引擎的文件-服务器环境切换到MicrosoftSQLServer的客户端-服务器环境。MicrosoftOffice2000中的Access2000UpsizingWizard可以将数据表和查询转移到SQLServer7.0中。如果您使用的是早期版本的Access,您可以先将它升级到Access2000,然后使用其中的UpsizingWizard将您的应用程序移植到SQLServer。如果您不太愿意采用Access2000和UpsizingWizard实现移植,本文可以作为Access2000向SQLServer移植的指南。在Access上传输应用程序首先需要将数据传输到SQLServer,然后将查询传输到数据库中,或者将其传输到SQL文件中以便稍后执行。最后一步是移植应用程序。数据库迁移中使用的SQLServer工具SQLServerManager(SQLServerEnterpriseManager)SQLServerManager允许对SQLServer和SQLServer中的对象进行企业级的配置和管理。SQLServerManager提供了强大的调度引擎、高度的容错能力和嵌入式复制管理界面。使用SQLServerManager可以实现以下功能:管理连接和用户权限创建脚本程序管理SQLServer对象备份备份数据和事务日志管理表、视图、存储过程、触发器、索引、规则、默认值和用户-定义数据类型创建全文索引、数据库图表和数据库维护计划输入和输出数据转换数据执行各种网络管理任务在以MicrosoftWindowsNT为操作系统的计算机中,SQLServerManager由SQLServerSetup安装,默认为服务器组件,当运行在装有WindowsNT和MicrosoftWindows95的机器上时,默认情况下它将是客户端组件。您将从SQLServerManagerGUI启动数据转换服务(DTS、DataTransformationServices)。数据转换服务(DataTransformationServices,DTS)数据传输服务允许您在各种异构数据源之间输入和输出数据,这些数据源使用基于数据库的OLE架构;或者在多台计算机之间使用SQLServer7.0传输数据库和数据库对象;您还可以通过使用数据传输服务更轻松地在联机事务处理系统(OLTP)中构建数据仓库和数据中心。DTSWizard允许您以交互方式创建DTS包,以通过OLEDB和ODBC导入、导出、验证和传输数据。DTSWizard还允许您在关系数据库之间复制模式和数据。SQLServer查询分析器(QueryAnalyzer)SQLServer查询分析器是一个图形化的查询工具,通过它可以分析一个查询,同时执行多个查询,查看数据和得到索引建议。SQLServer查询分析器提供了一个showplan选项,可以用来显示SQLServer查询优化器选择的数据提取方法。SQLServerProfilerSQLServerProfiler可以实时捕获数据库服务器活动的连续记录。SQLServerProfiler允许您监视SQLServer产生的事件,根据用户指定的条件过滤事件,或将操作步骤输出到屏幕、文件或数据表。使用SQLServerProfiler,您可以重新执行上次捕获的操作。此工具可帮助应用程序开发人员识别可能降低应用程序性能的事务。在将基于文件架构的应用程序迁移到客户端/服务器架构时,此功能非常有用,因为其最后一步涉及为新的客户端/服务器环境优化应用程序。传输表和数据使用DTSWizard将您的Access数据传输到SQLServer,您可以按照以下步骤操作:在SQLServerManager(EnterpriseManager)的工具菜单中,将鼠标指向“DataTransformationServices”,然后单击“ImportData”。在“选择数据源”(ChooseaDataSource)对话框窗口中,选择MicrosoftAccess作为数据源,然后输入你的.mdb文件名(mdb是文件扩展名)或者选择浏览文件。在“ChooseaDestination”对话框窗口中,选择“MicrosoftOLEDBProviderforSQLServer”,选择数据库服务器,然后点击需要的认证方式。在SpecifyTableCopyorQuery的对话窗口中,单击Copytables。在“选择数据源”对话框窗口中,单击“全选”。迁移MicrosoftAccess查询您可以通过以下格式之一将Access查询传输到SQLServer:Transact-SQL脚本(Transact-SQLscripts)事务处理SQL语句通常由数据库程序调用,但您也可以使用SQLServer7.0中的SQLServerQuery分析器包含在直接运行它们。SQLServer查询分析器帮助开发人员测试事务性SQL语句,或运行执行查询处理、数据操作(插入、修改、删除)和数据定义(创建表)的事务性SQL语句。存储过程(Storedprocedures)开发人员可以将Access查询(搜索、插入、修改、删除)产生的大部分事务处理SQL语句转移到存储过程中。用事务性SQL语句编写的存储过程可以用来打包和规范你的数据访问,存储过程实际上是存储在数据库中的。存储过程可以带参数也可以不带参数,可以被数据库程序调用,也可以由SQLServer查询分析器手动执行。视图视图是显示一个或多个表中特定行和列的虚拟表。它们允许用户构建查询而无需直接执行作为其基础的复杂连接。视图不支持使用参数。不能使用INSERT、UPDATE或DELETE语句修改连接多个表的视图。视图由事务性SQL语句调用,也可用于在SQLServer查询分析器中运行的程序段。SQLServer视图和SQL-92标准不支持视图中的ORDERBY子句。有关事务性SQL、存储过程和视图的其他信息,请参阅SQLServer联机参考。Access查询类型的SQLServer迁移选项和建议SELECT语句可以存储在事务性SQL文件、存储过程或视图中。建立存储过程是将数据库应用程序开发与数据库设计的物理实现分开的最佳方式。存储过程可以在一个地方创建并由应用程序调用。如果存储过程所基于的数据库发生变化,并且仔细修改存储过程以反映这些变化,对存储过程的调用将不会中断。交叉表(CROSSTAB)交叉表通常用于汇总报表。Access交叉表可以通过SQL段、存储过程或视图中的事务性SQL语句来执行。每当发出查询时,都会重新执行数据连接以确保使用最新的数据。根据实际应用情况,更合适的方法是将交叉表中的数据存储为临时表(参考下面的MAKETABLE)。临时表需要的资源较少,但临时表在创建时只为数据提供一个。快照(快照)。创建表(MAKETABLE)Access中的“MAKETABLE”(创建表)可以通过事务处理SQL脚本程序或事务处理SQL语言“CREATETABLE”中的存储过程来执行。语法如下:SELECT[ALL|DISTINCT][{TOPinteger|TOPintegerPERCENT}[WITHTIES]][INTOnew_table][FROM{}[,…n]][WHERE][GROUPBY[ALL]group_by_expression[,…n][WITH{CUBE|ROLLUP}]CREATETABLEmytable(lowint,highint)UPDATE(modify)UPDATE语句可以存储在transaction_SQL脚本中,但是执行UPDATE语句更好的方法是创建一个存储过程。APPEND(添加)ALLEND语句可以存储在transaction_SQL脚本中,但是执行APPEND语句更好的方法是创建一个存储过程。将MicrosoftAccess查询移植到存储过程和视图每个Access查询必须替换为以下一系列语句:CREATEPROCEDUREASGOCREATEVIEWASGO对于每个Access查询,执行:打开Access,然后在SQLServer中,打开SQLServer查询分析器.在Access数据库窗口中,单击“查询”选项卡,然后单击“设计”按钮。单击“查看”菜单上的“SQL”按钮。将整个查询粘贴到SQLServer查询分析器中。测试语法,保存事务性SQL语句供以后使用,或在数据库中执行它们。您可以选择将事务处理SQL语句保存到脚本程序中。将MicrosoftAccess查询迁移到事务性SQL语句大多数Access查询应转换为存储过程和视图。但是,应用程序开发人员不太常用的一些语句可以存储为事务性SQL脚本,即文件扩展名为sql.txt的文本文件。这些文件可以在SQLServer查询分析器中运行。如果打算将一些Access查询转换成sql文件,可以考虑将这些事务处理SQL语句按照使用方式放在几个脚本程序中。例如,您可以将必须??以相同频率运行的事务性SQL语句分组到同一个脚本中。另一个脚本应包含仅在特定条件下运行的所有事务性SQL语句。此外,必须按特定顺序执行的事务性SQL语句应分组到一个离散的脚本中。将Access语句转为事务处理SQL文件将语句复制到SQLServerQueryAnalyzer使用蓝色多选项图标分析语句在合适的时间执行语句想在Access中执行MAKETABLE查询任务的开发者有以下几种SQLServer中的选项。开发人员可以创建以下对象之一:视图视图具有提供最新信息的动态虚拟表的作用。这是一个I/O增强器,因为它需要在每次发出查询时重新创建与表的连接。临时表创建连接的用户会话的快照。您可以创建本地或全局临时表。局部临时表只在当前会话中可见,而全局临时表在所有会话中可见。局部临时表的名称前缀为一位数字((#table_name)),全局临时表的名称前缀为两位数字前缀(##table_name)。对临时表的查询非常快,因为它们通常只使用一个表来获取结果集,而不是动态地将多个表连接在一起。有关临时表的其他信息,请参阅SQLServer联机参考。SQLServer7.0中的DataTransformationServices(DTS)允许您通过创建包来标准化、自动化和调度临时表的建立。例如,当您在Access2.0中迁移Northwind示例数据库时,季度数据报表的交叉表可以转换为视图或数据转换,可以根据规范创建临时表。有关DTS的更多信息,请参阅SQLServer联机参考书。其他设计注意事项以下是将Access应用程序迁移到SQLServer时必须考虑的一些其他问题:使用参数带参数的SQLServer存储过程需要不同于Access查询的语法格式,例如:Access2.0格式:查询名称:EmployeeSalesByCountry,inNWIND.mdb:PARAMETERS[BeginningDate]DateTime,[EndingDate]DateTime;SELECTOrders.[OrderID],[LastName]&","&[FirstName]ASSalesperson,Employees.Country,Orders.[ShippedDate],[订单小计].SubtotalAS[SaleAmount]FROMemployeesINNERJOIN(OrdersINNERJOIN[OrderSubtotals]ONOrders.[OrderID]=[OrderSubtotals].[OrderID])ONemployees.=Orders.WHERE(((Orders.[ShippedDate])Between[BeginningDate]And[EndingDate]))ORDERBY[LastName]&","&[FirstName],Employees.Country,Orders.[ShippedDate];SQLServer7.0格式:CREATEPROCEDUREEMP_SALES_BY_COUNTRY@BeginningDatedatetime,@EndingDatedatetimeASSELECTOrders.[OrderID],[LastName]+","+[FirstName]AS销售人员,员工。国家,订单。[发货日期e],[OrderSubtotals].小计AS[SaleAmount]FROMemployeesINNERJOIN(OrdersINNERJ
