MYSQL编程:把Access数据库移植到SQL SERVER7.0
MySQL在业界的流行所带来的另一个好处是,人们总可以很轻松地发现本行业的MySQL学习教程。厂商都希望他们的开发工具和应用程序框架可以与MySQL数据库兼容。当对企业级的高功能的数据库的请求和需求增添时,客户偶然必要从文件?服务器情况的MicrosoftAccessJet引擎迁徙到客户?服务器情况的MicrosoftSQLServer。伴同微软Office2000刊行的Access2000UpsizingWizard(晋级导游)能够把Access表格和查询迁徙到SQLServer7.0。假如你利用Access的初期版本,你也能够经由过程晋级到Access2000,并利用晋级导游把你的使用程序移植到SQLSERVER。假如你不喜好利用Access2000和晋级导游举行移植,那末这篇文章作为向迁徙一个Access使用程序到SQLServer。要迁徙Access使用程序,你必要起首把数据迁徙到SQLServer7.0,然后把Access查询移植到数据库或SQL文件,最初是移植使用程序。
移植中利用的SQLServer工具
SQLServer中的一些工具能够匡助你移植Access数据和使用程序
SQLServer企业办理器
SQLServer企业办理器同意对SQLServer和SQLServer工具的企业局限的设置和办理。SQLServer企业办理器供应了一个壮大的义务布置引擎、办理告诫才能、和内建的复制办理界面。你还能够用SQLServer企业办理器来:
办理登录和用户权限创立剧本办理SQLSERVER工具的备份备份数据库和事件日记办理表、视图、存储历程、触发器、索引、划定规矩、缺省设定和自界说数据范例
创立全文索引、数据库图表和数据库保护计划输出输入数据转换数据实行分歧的Web收集办理义务缺省情形下,SQLServer企业办理器被SQLServer作为服务器软件的一部分安装在运转WindowsNT操纵体系的盘算机上,同时作为客户软件的一部分安装在运转WindowsNT和Windows95操纵体系的盘算机上。你极可能要从SQLServer企业办理器的图形用户界面启动数据转换服务(DataTransformationServices,DTS)。
数据转换服务(DTS)
数据转换服务同意你在利用一个OLEDB布局的多个数据源之间输出和输入数据,如许的数据源有MicrosoftExcel电子表格,和在运转SQLServer7.0的多台盘算机之间实行数据库和数据库工具的传输。你还能够用DTS来实行数据转换,以便用它来经由过程一个在线事件处置体系创建数据堆栈和数据阛阓。
DTS导游同意你交互的创立利用OLEDB和ODBC来举行输出、输入、确认和分歧数据的转换的DTS包。导游还同意你在相干数据库之间拷贝企图和数据。
SQLSERVER查询剖析器(ServerQueryAnalyzer)
SQLSERVER查询剖析器是一个图形化查询工具,它同意你可视化的剖析一个查询计划,同时实行多重查询、检察数据、取得索引倡议。SQLServer查询剖析器供应显现计划(showplan)选项,能够用它来呈报SQLServer查询优化器选择的数据猎取计划。
SQLServer表面(ServerProfiler)
SQLSERVER表面及时捕获服务器举动的一连的纪录。SQLServer表面同意你监控经由过程SQLServer发生的事务,过滤基于用户指定原则的事务和间接跟踪到显现器、文件大概表的输入。利用SQLServer表面,你能够重放先前的捕获纪录。这个工具匡助使用程序开辟职员判别大概使使用程序功能好转的事件。当从一个基于文件的系统布局移植一个使用程序到一个基于客户/服务器的系统布局时,它是很有匡助的,由于最初的步骤包括针对使用程序的新客户/服务器情况优化该使用程序的操纵。
挪动表格和数据
利用DTS导游迁徙你的Access数据到SQLServer,你可使用这些步骤:
在SQLSERVER企业办理器中的Tools(工具)菜单上,选择DataTransformation
Services(数据转换服务),然后选择ImportData(导进数据)。
在ChooseaDataSource(选择数据源)对话框当选择MicrosoftAccessastheSource,然后键进你的.mdb数据库(.mdb文件扩大名)的文件名或经由过程扫瞄寻觅该文件。
在ChooseaDestination(选择方针)对话框中,选择MicrosoftOLE DBProviderforSQL Server,选择数据库服务器,然后单击需要的考证体例。
在SpecifyTableCopy(指定表格复制)或Query(查询)对话框中,单击Copytables(复制表格)。
在SelectSourceTables(选择源表格)对话框中,单击SelectAll(全体选定)。
移植MicrosoftAccess查询
你必需以这些格局之一迁徙你现有的Access查询到SQLServer:
Transact-SQL剧本Transact-SQL语句一般从数据库程序被挪用,可是你可使用包括在SQLServer
7.0中的SQLServer查询剖析器在数据库中间接运转它们。SQLServer查询剖析器匡助开辟者针对开辟数据库测试Transact-SQL语句,或运转Transact-SQL语句实行查询、数据操纵(INSERT、UPDATE、DELETE)或数据界说(CREATETABLE)。
存储历程开辟者能够把年夜多半源于Access查询(SELECT、INSERT、UPDATE和DELETE)的Transact-SQL语句转换为存储历程。用Transact-SQL写的存储历程能够用来封装和尺度化你的数据会见,存储历程实践上存储在数据库内。存储历程能带大概不带参数运转,能够从数据库程序挪用,也能够从SQLServer查询剖析器手动实行。
视图视图作为假造的表格从一个或更多的表格显现指定的行和列。它们同意用户创立查询而不必间接完成那些庞大的底层查询。视图不撑持参数。向视图到场一个更多的表格不克不及利用INSERT、UPDATE、或DELETE语句修正。视图能够用Transact-SQL语句挪用,而且也能够在SQLServer查询剖析器中的*.scripts中利用。SQLServer视图和SQL-92尺度不撑持视图中的ORDERBY子句。
更多关于Transact-SQL、存储历程大概视图的信息,见SQLServerBooksOnline。
Access查询范例
SQL Server移植选项和正文
一个SELECT语句能够被存储在Transact-SQL文件、存储历程大概视图中。
创立存储历程是完成把数据库使用程序开辟同数据库计划的物理完成分别的最好办法。存储历程在一个中央创立,而且被使用程序挪用。
假如底层数据库改动了,而且存储历程被细心的修正以反应这些变更,则对存储历程的挪用不会被“中止”。
CROSSTAB交织表常常用于择要呈报。
Access交织表能够在SQL剧本中作为Transact-SQLSELECT语句完成,也能够作为存储历程大概一个视图完成。每次一个查询被枚举的时分,数据节点将会重实行,请确保利用最新的数据。
依据分歧的数据库必要,大概把交织表中的数据存储为一时表对照符合(请参看下一行的MAKETABLE)。一时表只必要很少的资本,可是只供应了创立一时表的时候,数据的一个拍照。
MAKETABLE
Access的MAKETABLE能够在Transact-SQL剧本大概存储过程当中作为Transact-SQL的CREATETABLE语句完成。语法以下:
SELECT
[{TOPinteger|TOPintegerPERCENT}]
]
group_by_expression[,…n]
CREATETABLEmytable(lowint,highint)
UPDATE
UPDATE语句能够被存储在Transact-SQL剧本中;可是,完成UPDATE语句的保举办法是创立一个存储历程。
APPEND
APPEND语句能够被存储在Transact-SQL剧本中;可是,完成APPEND语句的保举办法是创立一个存储历程。
DELETE
DELETE语句能够被存储在Transact-SQL剧本中;可是,完成DELETE语句的保举办法是创立一个存储历程。
把微软Access查询迁徙到存储历程和视图
每一个Access查询必需被置进这汇合语句的汇合:
CREATEPROCEDUREAS
<SELECT,UPDATE,DELETE,INSERT,CREATETABLEstatementfromMicrosoftAccess>
GO
CREATEVIEWAS
GO
对每一个Access查询:
翻开Access,然后在SQLServer上翻开SQLServer查询剖析器。
在Access中,在数据库窗口,单击Queries(查询)标签,然后单击Design(计划)。
在View(视图)菜单上,单击SQL。
粘贴全部查询到SQLServer查询剖析器。
测试语法和而且为今后利用保留Transact-SQL语句,大概在数据库中运转语句。
你能够有选择的保留Transact-SQL为剧本。
移植微软Access查询到Transact-SQL剧本
年夜多半Access查询应当被翻译成存储历程和视图。但是,使用程序开辟职员很少运转一些语句能够作为一个Transact-SQL剧本存储,这是一个文件扩大名为.sql的文本文件。这些文件能够从SQLServer查询剖析器中运转。
假如你企图把你的一些Access查询转换为.sql文件,思索把Transact-SQL语句分红几个剧本,详细操纵要依据怎样利用这些语句而定。比方,你能够把那些必需以统一频次运转的Transact-SQL语句组合到一个剧本中。另外一个剧本大概包括那些只能在特定前提下运转的Transact-SQL语句。别的,那些必需按必定的按次实行的Transact-SQL语句应当组合在一个团圆剧本中。
要把一个Access语句转换为Transact-SQL文件:
复制该语句到SQLServer查询剖析器。
利用蓝色的反省标志图标剖析语句。
假如符合就实行语句。
MAKETABLE 语句在SQLServer中有几种转换体例。开辟职员能够创立上面恣意一种:
视图视图创立一个静态的、供应最新信息的假造一时表格的效果。这是I/O麋集的,由于每次枚举一个查询时就要从头到场数据表。
一时表。
一时表为一个毗连用户会话创立一个数据快照。你能够创立部分和全局一时表。
部分一时表只能在以后会话中是可视的;全局一时表对一切会话都是可视的。部分一时表的前缀用单一的数字标记定名(#table_name),全局一时表的前缀用两个数字标记定名(##table_name)。对一时表的查询运转得很快,由于它们一般只利用一个表格而不是静态的毗连几个表来取得一个了局集。
关于一时表的更多信息,见SQLServerBooksOnline。
在SQLSERVER7.0中数据变更服务(DTS)同意你经由过程创立包完成一时表创立的尺度化、主动化和按期企图实行。
比方,当你移植Access2.0Northwind示例数据库时,为季度数据呈报而创立的交织表被转换为一个视图大概是在惯例基本上创立一时表的数据转换。关于DTS的更多信息,拜见SQLServerBooksOnline。
附加计划思索
上面是一些当你把你的Access使用程序移植到SQLServer时应当思索的成绩。
利用参数
带参数的SQLServer存储历程必要一种来自Access查询的分歧的语法,比方:
Access2.0:
查询称号:EmployeeSalesByCountry,inNWIND.mdb:
PARAMETERSDateTime,DateTime;SELECTOrders.,&","&ASSalesperson,Employees.Country,Orders.,.SubtotalAS
FROMEmployeesINNERJOIN(OrdersINNERJOINONOrders.=.)ONEmployees.=Orders.
WHERE(((Orders.)BetweenAnd))
ORDERBY&","&,Employees.Country,Orders.;
SQL Server7.0:
CREATEPROCEDUREEMP_SALES_BY_COUNTRY@BeginningDatedatetime,
@EndingDatedatetime
AS
SELECTOrders.,+","+ASSalesperson,Employees.Country,
Orders.,.SubtotalAS
FROMEmployeesINNERJOIN(OrdersINNERJOINONOrders.=.)ONEmployees.=Orders.
WHERE(((Orders.)Between@BeginningDateAnd@EndingDate))
ORDERBY+","+,Employees.Country,Orders.
GO
更多信息,请参看SQLServerBookOnline
嵌套查询(NestedQueries)
在嵌套情势中,某些Access查询是在其余查询的顶层上创立的。Access中的嵌套查询在SQLServer中酿成为嵌套视图。而ORDERBY不克不及作为视图界说的一部分,能够用附加一个查询视图的SELECT语句来取代它。假如你有嵌套的Access查询,你必要创立一系列视图,然后创立那些在视图上实行SELECT语句的存储历程,而且把ORDERBY子句粘贴到SELECT语句上。
比方,上面的Access查询:
SELECT*FROMSTUDENTS
WHERECOUNTRY="USA"
ORDERBYLAST_NAME
酿成一个SQLServer视图和存储历程
CREATEVIEWUS_STUDENTSASSELECT*FROMSTUDENTS
WHERECOUNTRY="USA"
CREATEPROCEDUREUS_STUDENTS_ORDERAS
SELECT*FROMUS_STUDENTSORDERBYLASTNAME
反省SQLServer
你可使用SQLServer查询剖析器的查询菜单上的Parse命令反省SQLServer中的视图或存储历程函数。鄙人面的例子中,Access查询利用DISTINCTROW。SQLServer利用Transact-SQLDISTINCT命令实行不异的操纵。Parse命令同意开辟职员伶仃而且修正他们的Access查询中的语法成绩。
毗连你的使用程序
很多Access使用程序是用MicrosoftVisualBasicforApplications或VisualBasicforApplicationsAccess用户接口写成的。
利用VisualBasicforApplications作为使用程序开辟情况的使用程序能在SQL
Server下运转,用JetODBC驱动程序。
利用Access用户接口中的窗体和报表的使用程序能利用毗连表会见SQLServer。
假如你的使用程序要利用毗连表,确保一切Access表转移到SQLServer以加强功能。对Access(Jet)和SQLServer的夹杂体利用毗连表创立查询是资本麋集的。
移植你的文件-服务器使用程序到客户/服务器模子第一步是确保使用程序能在新数据库上事情。下一步是经由过程上面的办法为客户/服务器情况优化使用程序:
监听传送到服务器的Transact-SQL语句。
SQLSERVER表面是监听Transact-SQL语句如何被送到数据库的一个有效的工具。
假如你在SQLServer上运转没有修正的Access使用程序,你大概会经由过程利用DAO和Jet/ODBC驱动程序向数据库传送未经优化的Transact-SQL。比方,利用Jet/ODBC驱动程序的DELETE语句来删除1000即将发生1000次到数据库的挪用,这将会严峻的影响产物数据库的功能。在这个例子中,SQLSERVER表面展现了1000个删除语句,同意你利用有MicrosoftOLEDBProviderforSQLServer和MicrosoftActiveXDataObjects(ADO)修正使用程序,从而改善使用程序的效力。
完成高效索引。
在你断定传送到数据库的Transact-SQL语句的效力今后,你可使用索引更无效的调剂那些语句。索引调剂导游(IndexTuningWizard)同意你查找瓶颈,而且向你提出倡议。你的语句并没有被修正,可是因为准确利用索引而使它们的功能进步了。
SQLSERVER和Access查询语法
以下的表格显现SQLSERVER和Access查询语法之间对应的区分。
Access查询语法
SQL Server查询语法
查询中的ORDERBY在视图中不撑持ORDERBY
DISTINCTROW
DISTINCT
用"&"做字符串连用"+"做字符串连
撑持的子句/操纵符:
SELECTSELECTTOPNINTOFROMWHEREGROUPBYHAVINGUNION(ALL)ORDERBYWITHOWNERACCESS撑持的子句/操纵符:
SELECTSELECTTOPNINTOFROMWHEREGROUPBYHAVINGUNION(ALL)ORDERBYCOMPUTEFORBROWSEOPTION
不撑持:COMPUTE,FORBROWSE,OPTION不撑持:WITHOWNERACCESS
统计函数:
AVG
COUNT(column)
COUNT(*)
MIN
MAX
FIRST
LAST
STDEV,STDEVP
SUM
VAR,VARP统计函数:
AVG(expression)
COUNT(expression)
COUNT(*)
GROUPING(column_name)
MAX(expression)
MIN(expression)
STDEV,STDEVP
SUM(expression)
VAR,VARP
不撑持:FIRST,LAST
TRANSFORM
(SELECTstatement)
PIVOT
WITHROLLUP,WITHCUBEonSELECTstatements
MAKETABLE,ALTERTABLE
撑持的子句:
CONSTRAINT
ADDCOLUMN
DROPCOLUMN
DROPINDEX
Also,stand-alonestatement:DROPINDEX
CREATETABLE,ALTERTABLE
撑持的子句:
CONSTRAINT
ADDCOLUMN
DROPCOLUMN
Stand-alonestatement:DROPINDEX
你碰到的问题可能已经在社区中被别的人已经问过,即使没有MySQL学习教程,你也可以提出问题或通过Google来搜索答案。社区的相关负责人士:“MySQL社区是活跃、友好和内容渊博的。” 如果处理少量数据,比如几百条记录的数据,我不知道这两种情况哪个效率更高,如果处理大量数据呢?比如有表中有20万条记录. 原理很简单,对要求长时间计算某一时间点的报表生成和防用户操作错误很有帮助。但是比起Oracle10g的闪回技术还是细粒度不够。可惜! 至于淘汰的问题,只能说在你的项目周期之内,微软应该都不会倒闭。 其中最有名的应该是row_number了。这个终于解决了用临时表生成序列号的历史,而且SQLServer2005的row_number比Oracle的更先进。因为它把Orderby集成到了一起,不用像Oracle那样还要用子查询进行封装。 换言之,只有在不断的失败中尝试成功,而关于失败的总结却是很少的 可能有的朋友会抱怨集成的orderby,其实如果使用ranking函数,Orderby是少不了的。如果担心Orderby会影响效率,可以为orderby的字段建立聚集索引,查询计划会忽略orderby操作(因为本来就是排序的嘛)。
页:
[1]