仓酷云

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

[学习教程] MSSQL编程:编写数据库剧本

[复制链接]
柔情似水 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:26:49 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
“数据行级锁定”的意思是指在事务操作的执行过程中锁定正在被处理的个别记录,不让其他用户进行访问。这种锁定将影响到(但不限于)SELECT、LOCKINSHAREMODE、SELECT、FORUPDATE命令以及INSERT、UPDATE和DELETE命令。剧本|数据|数据库
AndrewClinick

宣布日期:2000年1月10日

我在“IfItMoves,ScriptIt”(英文)这篇文章中曾谈到,怎样利用“WindowsScriptHost(WSH)”(Windows剧本主机)办理Windows和Windows中的使用程序。文中的年夜多半示例都是基于办理Windows操纵体系本身的,其实不基于在该操纵体系下运转的使用程序。为欢迎新千年,我想我应当谈谈,怎样在浩瀚显现可剧本化接口的使用程序中利用剧本。此次只触及“SQLServer”。在今后的几个月中,我将侧重谈Exchange、Office和“体系办理服务器”。
您能够经由过程利用“散布式办理工具”、“数据转换服务”和新的“SQLServerXML”完成,将剧本用于“SQLServer”。
很多人都可以经由过程“ActiveDataObject(ADO)”和“ActiveServerPage(ASP)”手艺会见数据库了。ADO在匡助您查询和更新数据库方面做了大批的事情―但在备份(Y2K成绩带给我们的小心)或是数据库之间的传输数据方面,其体现又怎样呢?而这时候就非触及到XML不成了。

在此,我将告知您怎样经由过程利用ADO的陪伴手艺-出格是“散布式办理工具”、“数据转换服务”和新的“SQLServerXML”完成,将剧本用于“SQLServer”。
散布式办理工具
“散布式办理工具(DMO)”是一组COM工具,它将“SQLServer”数据库和复制办理封装在一同。这意味着您能够编写一个WSH剧本,将特定表中的一切数据都复制到用制表符分开的文件中,这有助于大批数据的挪动。我之以是选择这个示例,是由于它的代码编写起来复杂,但DMO同意您猎取“SQLServer”中的每一个工具,使您可以编写出一些十分优异而成心义的办理剧本。

DMO的关头是SQLDMO.SQLServer工具,它是基础的工具,它同意您毗连到服务器并猎取一切可用工具。在这类情形下,我将利用Database汇合来选择数据库,然后从table汇合会见要转储到文件的表。假如不供应数据库,将呈现毛病动静,而且剧本也就停止了。假如不供应表名,剧本将在数据库一切的表中轮回,并导出非体系表。假如供应了数据库,它就导出该表。该示例固然功效无限,但它为“SQLServer”供应了基于命令行的复杂的导出有用程序,您能够以它为依据。

如今先看一段代码:

声明与sql发言时利用的变量DimoServerSQLServer工具DimoDatabase要利用的方针数据库DimoBCPBCP工具DimnRows从bcp前往的行数dimtable表工具onerrorresumenext第一个参数必需是数据库ifWScript.Arguments(0)=""thenWScript.Echo"您没有供应要毗连的数据库"WScript.Quitendif创立SQLDMO的实例SetoServer=CreateObject("SQLDMO.SQLServer")创立SQLDMOBulkcopy工具的实例SetoBCP=CreateObject("SQLDMO.BulkCopy")oServer.EnableBcp=True登录到当地服务器但愿您已变动了sa口令!!oServer.Connect".","sa"毗连到供应的数据库SetoDatabase=oServer.Databases(Wscript.Arguments(0))将分开符设置为逗号oBCP.ColumnDelimiter=vbComma将文件范例设置为以逗号分开oBCP.DataFileType=SQLDMODataFile_CommaDelimitedCharoBCP.ImportRowsPerBatch=1000oBCP.MaximumErrorsBeforeAbort=1BCP.RowDelimiter=vbCrLfoBCP.ServerBCPDataFileType=SQLDMOBCPDataFile_CharoBCP.UseExistingConnection=True假如未供应表,则转储一切的表fwscript.Arguments(1)=""thenforeachtableinoDatabase.tables确保该表不是体系表iftable.systemobject=falsethenoBCP.DataFilePath=table.name&".csv"nRows=table.ExportData(oBCP)wscript.EchonRows&"rowsexportedfrom"&table.nameendifnextelse设置输入文件oBCP.DataFilePath=wscript.Arguments(1)&".csv"nRows=oDatabase.Tables(wscript.arguments(1)).ExportData(oBCP)wscript.EchonRows&"rowsexportedfrom"&wscript.arguments(1)endif

DMO的全体内容要比本文先容的多很多,但我但愿本文能给您一些理性熟悉:用某些复杂的WSH剧本和DMO能够做些甚么。您能够下载我的示例(英文)。有关DMO的具体信息,请会见http://msdn.microsoft.com/library/psdk/sql/9_dmoc01.htm(英文)。
数据转换服务
导出到CommaSeparated文件(CSV),能够作为将数据导出到SQL和从SQL导进的出发点,但这不象是尖端科技(太甚于20世纪了,您不以为吗?)。“SQLServer7.0”以“数据转换服务(DTS)”的情势,供应了相称完美的导进和导出机制。侥幸的是,剧本在“SQLServer”的这个新范畴中仍有一席之地,因而,您能够用“VisualBasic(R)剧本编纂(VBScript)”、“JScript(R)”或“Perl”的手艺来扩大DTS的才能。

DTS的设置十分复杂,出格是在利用“SQLServerEnterpriseManager”的时分。在默许情形下,“SQLServer”有一个界说的文件夹,可存储任何转换,并且“EnterpriseManager”供应了创立和编纂DTS程序包的年夜的图形用户界面(GUI)。鄙人面的示例中,我选择了已由sqlexport.wsf文件创立的employees.csv文件和“SQLServer”中的一个新表。DTA程序包将创立该表,加载到Text文件中,然后运转某个剧本,将数据转换到“SQLServer”的表中。


DTS程序包中的转换,使剧本在全部转换过程当中坚持运转形态。“SQLEnterpriseManager”供应的复杂的剧本编纂器,有一个语法剖析剧本按钮。在运转剧本之前,该按钮将告诫您剧本中的毛病。在转换过程当中,该剧本利用VBScript的Cint功效,将employeeid和deptid的输出转换为int,并将一切的电子邮件地点转换为小写字母。

**********************************************************************VisualBasic转换剧本把每一个源列复制到方针列***********************************************************************FunctionMain()DTSDestination("EmployeeID")=cint(DTSSource("Col001"))DTSDestination("FirstName")=DTSSource("Col002")DTSDestination("LastName")=DTSSource("Col003")DTSDestination("email")=lcase(DTSSource("Col004"))DTSDestination("extension")=DTSSource("Col005")DTSDestination("office")=DTSSource("Col006")DTSDestination("DeptID")=cint(DTSSource("Col007"))Main=DTSTransformStat_OKEndFunction

用DTS,可以接纳某些完美的导进/导出机制,并使您可以在转换的任何一步中利用剧本。主要的是,要注重剧本大概不是操纵数据的最好体例―特别是您的数据集很年夜的话。假如您有大批数据必要转换,并且功能也很主要,则您大概必要思索利用VisualBasic或C++来创立COM组件,然后从DTS外部挪用该组件。也就是说,假如功能其实不主要,而且要在数据导进/导出时对它举行转换,则剧本为您供应了完成这一点的天真机制,并使您可以将一切代码存储到“SQLServer”数据库中,使部署变得相称复杂。
关于XML
今朝,XML看起来像是在使用程序之间共享数据的最好工具,以是“SQLServer”的一切办理一定都失掉了XML的优点。编写提取数据库中一切数据的剧本,和编写用编程的办法创立XML文档的剧本,都是大概的。可是,假如您只需查询“SQLServer”的话,最好使它在XML中前往数据,然后用剧本操纵该XML。“SQLServer”组比来刊行了“SQLServerXML”手艺的非正式版本,完整做到了这一点。

新的XML手艺利用起来十分复杂。实践上是对服务器收回HTTP哀求,将查询传送给服务器,而服务器前往XML。为了举例申明,我创立了复杂的WSH剧本,它向当地呆板查询NorthWind数据库的雇员表中的一切数据。为会见XML,该剧本利用了“InternetExplorer5.01”附带的XML剖析程序。此工具的美好的地方,在于它处置您一切的HTTP哀求,并使您可以同步伐用。由于您不再用途理任何事务驱动的程序,以是,它对编写剧本很有匡助。

该剧本十分复杂。它创立了XML剖析程序的实例,利用剖析程序翻开URL,然后将了局保留为.xml文件。只需五行的剧本,不错吧!

设置哀求的urlxmlpath="http://localhost/Northwind?sql=select+*+from+employees+for+xml+auto"创立“XML剖析程序”的实例SetmyXMLDoc=CreateObject("Microsoft.XMLDOM")不必要异步myXMLDoc.async=false加载该URLmyXMLDoc.Loadxmlpath保留文档myXMLDoc.save"employees.xml"

它的壮大的地方在于,如今可很简单地与服务器创建远程毗连并转储数据;只需变动URL,您早已做过了。此例告知您怎样导出,可是您能够轻松地写出导进例路程序,用XML剖析程序在XML中重复操纵并将值拔出数据库中。
择要
“SQLServer”供应周全的可编写剧本的机制,用于当地或远程办理数据库。DMO和DTS已上市(实践上,DMO已刊行了很多版本),以是您能够间接使用它们,使您的数据库办理义务主动化。Windows2000已与“WindowsScriptHost2.0”一同上市,以是以上一切剧本的运转,都不受装有“SQLServer”的Windows2000服务器的前提限定。“SQLServer”中新的XML手艺使存取数据变得十拿九稳,从而使编写“SQLServer”的剧本加倍简单。有关“SQLServer”的具体信息,请会见SQLServerDeveloperenter(英文)。

AndrewClinick是“MicrosoftScriptTechnology”组中的程序司理,时机使然,只需触及剧本,他便可能大显神通一番。他的年夜部分专业工夫都花在寓目美国电视台转播的出色橄榄球赛,和向他的美国同事讲授板球。


两个到底是哪一个给出了MySQL这个名字至今依然是个迷,包括开发者在内也不知道。
小妖女 该用户已被删除
沙发
发表于 2015-1-18 15:02:43 | 只看该作者
个人感觉没有case直观。而且默认的第三字段(还可能更多)作为groupby字段很容易造成新手的错误。
老尸 该用户已被删除
板凳
发表于 2015-1-22 07:22:33 | 只看该作者
两个月啃那本sqlserver2005技术内部-存储引擎,花了几个月啃四本书
爱飞 该用户已被删除
地板
发表于 2015-1-30 23:44:35 来自手机 | 只看该作者
另一个是把SQL语句写到服务器端,就是所谓的SP(存储过程);
简单生活 该用户已被删除
5#
发表于 2015-2-6 17:04:30 | 只看该作者
备份方面可能还是一个老大难的问题。不能单独备份几个表总是感觉不爽。灵活备份的问题不知道什么时候才能解决。
蒙在股里 该用户已被删除
6#
发表于 2015-2-17 13:03:01 | 只看该作者
理解了存储结构,再阅读下性能优化的章节基本上会对sqlserver有个清晰地认识
冷月葬花魂 该用户已被删除
7#
发表于 2015-3-5 19:42:02 | 只看该作者
SQL语言是学习所有数据库产品的基础,无论你是做数据库管理还是做数据库开发都是这样。不过具体学习的侧重点要看你将来做哪一块,如果是做数据库管理(DBA),侧重点应该放在SQLServer的系统管理上.
只想知道 该用户已被删除
8#
发表于 2015-3-12 13:16:24 | 只看该作者
个人感觉没有case直观。而且默认的第三字段(还可能更多)作为groupby字段很容易造成新手的错误。
小女巫 该用户已被删除
9#
发表于 2015-3-19 22:33:00 | 只看该作者
你觉得我的非分区索引无法对起子分区,你可以提醒我一下呀!没有任何的提醒,直接就变成了非分区表。不知道这算不算一个bug。大家也可以试试。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-3-13 03:25

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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