Ⅰ 如何对变异的sql语句做解析处理
优化SQL查询:如何写出高性能SQL语句1、首先要搞明白什么叫执行计划?执行计划是数据库根据SQL语句和相关表的统计信息作出的一个查询方案,这个方案是由查询优化器自动分析产生欀如一条SQL语句如果用来从一个10万条记录的表中查1条记录,那查询优化器会选择“索引查找”方式,如果该表进行了归档,当前只剩下5000条记录了,那查询优化器就会改变方案,采用“全表扫描”方式。可见,执行计划并不是固定的,它是“个性化的”。产生一个正确的“执行计划”有两点很重要:(1)SQL语句是否清晰地告诉查询优化器它想干什么?(2)查询优化器得到的数据库统计信息是否是最新的、正确的?2、统一SQL语句的写法对于以下两句SQL语句,程序员认为是相同的,数据库查询优化器认为是不同的。select*fromalselect*Fromal其实就是大小写不同,查询分析器就认为是两句不同的SQL语句,必须进行两次解析。生成2个执行计划。所以作为程序员,应该保证相同的查询语句在任何地方都一致,多一个空格都不行!3、不要把SQL语句写得太复杂我经常看到,从数据库中捕捉到的一条SQL语句打印出来有2张A4纸这么长。一般来说这么复杂的语句通常都是有问题的。我拿着这2页长的SQL语句去请教原作者,结果他说时间太长,他一时也看不懂了。可想而知,连原作者都有可能看糊涂的SQL语句,数据库也一样会看糊涂。一般,将一个Select语句的结果作为子集,然后从该子集中再进行查询,这种一层嵌套语句还是比较常见的,但是根据经验,超过3层嵌套,查询优化器就很容易给出错误的执行计划。因为它被绕晕了。像这种类似人工智能的东西,终究比人的分辨力要差些,如果人都看晕了,我可以保证数据库也会晕的。另外,执行计划是可以被重用的,越简单的SQL语句被重用的可能性越高。而复杂的SQL语句只要有一个字符发生变化就必须重新解析,然后再把这一大堆垃圾塞在内存里。可想而知,数据库的效率会何等低下。4、使用“临时表”暂存中间结果简化SQL语句的重要方法就是采用临时表暂存中间结果,但是,临时表的好处远远不止这些,将临时结果暂存在临时表,后面的查询就在tempdb中了,这可以避免程序中多次扫描主表,也大大减少了程序执行中“共享锁”阻塞“更新锁”,减少了阻塞,提高了并发性能。5、OLTP系统SQL语句必须采用绑定变量select*>’2010-10-2000:00:01′select*>’2010-09-2200:00:01′以上两句语句,查询优化器认为是不同的SQL语句,需要解析两次。如果采用绑定变量select*>@chgtime@chgtime变量可以传入任何值,这样大量的类似查询可以重用该执行计划了,这可以大大降低数据库解析SQL语句的负担。一次解析,多次重用,是提高数据库效率的原则。6、绑定变量窥测事物都存在两面性,绑定变量对大多数OLTP处理是适用的,但是也有例外。比如在where条件中的字段是“倾斜字段”的时候。“倾斜字段”指该列中的绝大多数的值都是相同的,一张人口调查表,其中“民族”这列,90%以上都是汉族。那么如果一个SQL语句要查询30岁的汉族人口有多少,那“民族”这列必然要被放在where条件中。这个时候如果采用绑定变量@nation会存在很大问题。试想如果@nation传入的第一个值是“汉族”,那整个执行计划必然会选择表扫描。然后,第二个值传入的是“布依族”,按理说“布依族”占的比例可能只有万分之一,应该采用索引查找。但是,由于重用了第一次解析的“汉族”的那个执行计划,那么第二次也将采用表扫描方式。这个问题就是着名的“绑定变量窥测”,建议对于“倾斜字段”不要采用绑定变量。7、只在必要的情况下才使用begintranSQLServer中一句SQL语句默认就是一个事务,在该语句执行完成后也是默认commit的。其实,这就是begintran的一个最小化的形式,好比在每句语句开头隐含了一个begintran,结束时隐含了一个commit。有些情况下,我们需要显式声明begintran,比如做“插、删、改”操作需要同时修改几个表,要求要么几个表都修改成功,要么都不成功。begintran可以起到这样的作用,它可以把若干SQL语句套在一起执行,最后再一起commit。好处是保证了数据的一致性,但任何事情都不是完美无缺的。Begintran付出的代价是在提交之前,所有SQL语句锁住的资源都不能释放,直到commit掉。可见,如果Begintran套住的SQL语句太多,那数据库的性能就糟糕了。在该大事务提交之前,必然会阻塞别的语句,造成block很多。Begintran使用的原则是,在保证数据一致性的前提下,begintran套住的SQL语句越少越好!有些情况下可以采用触发器同步数据,不一定要用begintran。8、一些SQL查询语句应加上nolock在SQL语句中加nolock是提高SQLServer并发性能的重要手段,在oracle中并不需要这样做,因为oracle的结构更为合理,有undo表空间保存“数据前影”,该数据如果在修改中还未commit,那么你读到的是它修改之前的副本,该副本放在undo表空间中。这样,oracle的读、写可以做到互不影响,这也是oracle广受称赞的地方。SQLServer的读、写是会相互阻塞的,为了提高并发性能,对于一些查询,可以加上nolock,这样读的时候可以允许写,但缺点是可能读到未提交的脏数据。使用nolock有3条原则。(1)查询的结果用于“插、删、改”的不能加nolock!(2)查询的表属于频繁发生页分裂的,慎用nolock!(3)使用临时表一样可以保存“数据前影”,起到类似oracle的undo表空间的功能,能采用临时表提高并发性能的,不要用nolock。9、聚集索引没有建在表的顺序字段上,该表容易发生页分裂比如订单表,有订单编号orderid,也有客户编号contactid,那么聚集索引应该加在哪个字段上呢?对于该表,订单编号是顺序添加的,如果在orderid上加聚集索引,新增的行都是添加在末尾,这样不容易经常产生页分裂。然而,由于大多数查询都是根据客户编号来查的,因此,将聚集索引加在contactid上才有意义。而contactid对于订单表而言,并非顺序字段。比如“张三”的“contactid”是001,那么“张三”的订单信息必须都放在这张表的第一个数据页上,如果今天“张三”新下了一个订单,那该订单信息不能放在表的最后一页,而是第一页!如果第一页放满了呢?很抱歉,该表所有数据都要往后移动为这条记录腾地方。SQLServer的索引和Oracle的索引是不同的,SQLServer的聚集索引实际上是对表按照聚集索引字段的顺序进行了排序,相当于oracle的索引组织表。SQLServer的聚集索引就是表本身的一种组织形式,所以它的效率是非常高的。也正因为此,插入一条记录,它的位置不是随便放的,而是要按照顺序放在该放的数据页,如果那个数据页没有空间了,就引起了页分裂。所以很显然,聚集索引没有建在表的顺序字段上,该表容易发生页分裂。曾经碰到过一个情况,一位哥们的某张表重建索引后,插入的效率大幅下降了。估计情况大概是这样的。该表的聚集索引可能没有建在表的顺序字段上,该表经常被归档,所以该表的数据是以一种稀疏状态存在的。比如张三下过20张订单,而最近3个月的订单只有5张,归档策略是保留3个月数据,那么张三过去的15张订单已经被归档,留下15个空位,可以在insert发生时重新被利用。在这种情况下由于有空位可以利用,就不会发生页分裂。但是查询性能会比较低,因为查询时必须扫描那些没有数据的空位。重建聚集索引后情况改变了,因为重建聚集索引就是把表中的数据重新排列一遍,原来的空位没有了,而页的填充率又很高,插入数据经常要发生页分裂,所以性能大幅下降。对于聚集索引没有建在顺序字段上的表,是否要给与比较低的页填充率?是否要避免重建聚集索引?是一个值得考虑的问题!10、加nolock后查询经常发生页分裂的表,容易产生跳读或重复读加nolock后可以在“插、删、改”的同时进行查询,但是由于同时发生“插、删、改”,在某些情况下,一旦该数据页满了,那么页分裂不可避免,而此时nolock的查询正在发生,比如在第100页已经读过的记录,可能会因为页分裂而分到第101页,这有可能使得nolock查询在读101页时重复读到该条数据,产生“重复读”。同理,如果在100页上的数据还没被读到就分到99页去了,那nolock查询有可能会漏过该记录,产生“跳读”。上面提到的哥们,在加了nolock后一些操作出现报错,估计有可能因为nolock查询产生了重复读,2条相同的记录去插入别的表,当然会发生主键冲突。11、使用like进行模糊查询时应注意有的时候会需要进行一些模糊查询比如select*fromcontactwhereusernamelike‘%yue%’关键词%yue%,由于yue前面用到了“%”,因此该查询必然走全表扫描,除非必要,否则不要在关键词前加%,12、数据类型的隐式转换对查询效率的影响sqlserver2000的数据库一的程序在提交sql语句的时候,没有使用强类型提交这个字段的值,由sqlserver2000自动转换数据类型,会导致传入的参数与主键字段类型不一致,这个时候sqlserver2000可能就会使用全表扫描。Sql2005上没有发现这种问题,但是还是应该注意一下。13、SQLServer表连接的三种方式(1)MergeJoin(2)NestedLoopJoin(3)HashJoinSQLServer2000只有一种join方式——NestedLoopJoin,如果A结果集较小,那就默认作为外表,A中每条记录都要去B中扫描一遍,实际扫过的行数相当于A结果集行数xB结果集行数。所以如果两个结果集都很大,那Join的结果很糟糕。SQLServer2005新增了MergeJoin,如果A表和B表的连接字段正好是聚集索引所在字段,那么表的顺序已经排好,只要两边拼上去就行了,这种join的开销相当于A表的结果集行数加上B表的结果集行数,一个是加,一个是乘,可见mergejoin的效果要比NestedLoopJoin好多了。如果连接的字段上没有索引,那SQL2000的效率是相当低的,而SQL2005提供了Hashjoin,相当于临时给A,B表的结果集加上索引,因此SQL2005的效率比SQL2000有很大提高,我认为,这是一个重要的原因。总结一下,在表连接时要注意以下几点:(1)连接字段尽量选择聚集索引所在的字段(2)仔细考虑where条件,尽量减小A、B表的结果集(3)如果很多join的连接字段都缺少索引,而你还在用SQLServer2000,赶紧升级吧。
Ⅱ sql查询分析器是什么
在这个对话框里,您可以指定数据库服务器的修复设置,以及原始安装的数据文件的位置。要让这一过程更容易和更快,就要把x86目录从SQL的光盘上复制到硬盘上,并把指向改到本地的副本。一旦验证完了所有的信息,点击“重建(Rebuild)”。然后系统就会提示您确认操作,如图C所示。
图C
点击“确定(Yes)”。一旦重建过程完成,您会看到一条重建成功的消息。您现在就有了一个全新的主数据库,准备好修复主数据库了。
首先,打开命令行提示符,输入Program FilesMicrosoft SQL ServerMssqlBINN目录下的SQLservr.exe –c –m命令,启动单用户模式下的SQL Server。结果如图D所示。
图D
在单用户模式下启动SQL Server之后,您可以利用备份文件修复主数据库。您可以用“查询分析器(Query Analyzer)”或者“SQL企业管理器(SQL EntERPrise Manager)”来修复它。如果使用查询分析器,您就要像图E一样运行查询。
图E
如果使用企业服务器,就要右击主数据库,选择“所有任务|修复数据库(All Tasks | Restore Database)”,浏览到您设备所在的位置。点击两次“OK”,您就可以成功地修复主数据库了。修复完主数据库,退出单用户模式,在正常的操作模式下重新启动SQL Server。
如果由于某种原因您的修复操作无法成功完成,那么您可以试试别的方法。只用简单地重建主数据库并添加驻留在数据目录下的所有数据库就可以了。您可以用企业管理器或者查询分析器来添加数据库。在企业管理器里,右击“数据库 (Databases)”,选择“添加数据库(Attach Database)”,在查询分析器里,用示例脚本就能够添加您的数据库了。
结束语
既然已经知道了如何在碰到灾难的情况下成功地重建主数据库,那么您可以把这些技术增加到灾难修复预案中去。这样的话,您就不用再在SQL Server的主数据库崩溃导致数据库服务器停止工作的情况下不知所措了。
Ⅲ 如果要做sql的一个解析器,已经生成ast了,接下来要怎么做
如果要做sql的一个解析器,已经生成ast了,接下来要怎么做
如果题主对数据库基本没有系统性了解的话,去看《数据库系统概念》,什么都说完了,除了实现细节以外。通常来讲,AST做完当然是要做查询计划的优化了。但是如果你存储引擎还没写,我不知道你要怎么测试。
Ⅳ sql查询分析器怎么用
查询分析器左边的对象资源管理器,右键可以创建对象(不需要写代码),查看用户对象和系统对象,可以创建脚本,可以执行任务(分离,脱机,备份,还原数据库等等)。
而查询分析窗口可以写入SQL数据库支持的各种SQL语句,T-SQL语句,嵌入式编程语句来执行数据定义、数据操纵、数据查询、数据控制等语句,创建修改删除数据库对象(表,视图,索引,触发器)。窗口上面有分析和执行按钮,可以分析语句,执行语句。
窗口下面还显示语句执行结果,以及系统提示等等。
自己多摸索就好了。
网络的数据库真迟钝,答案都采纳了,我这还能提交,坑爹…
Ⅳ 如何破解general sql parser
首先这个工具是商业收费的,而且价格不菲。但是他提供了90天的实验版本供大家下载试用。
Java版本的下载地址:
http://www.sqlparser.com/dlaction.php?fid=gspjava&ftitle=General%20SQL%20Parser%20Java%20version
下载解压后,demos是一些实例,javadoc是Java帮助文档,还有UserGuide帮助手册,最重要的gsp.jar就是我们要build path到工程中的jar包了。
实例
下面我们写几个实例
一、检查语法
我们先讲讲下面的代码做了哪些事:
1. 定义一个简单的create语句(我们故意把name1的类型错误的设置成varchar2)
2. 创建一个MySQL解析器实例
Ⅵ sql查询分析器是什么
SQL查询分析器,是SQL Server的一个数据库管理工具,可以对数据库进行,数据检索、服务器设置等等。
Ⅶ 如何配置使用微软SQL Server 数据分析工具
本系列文章分两部分,本文是第二部分(第一部分参见:你的数据有多干净?)。我们将以测试体验的方式了解微软SQL Server提供的数据分析工具。
其它一些外部分析工具具有更丰富的功能,但是SQL Server授权允许你免费就可以使用这款低调的分析工具。
接下来让我们通过分析“AdventureWorksLT ”数据库中的一些数据来了解这款工具。
在此之前,你需要先安装好SQL Server集成服务,以及与SQL Server捆绑的Visual Studio精简版。在SQL Server 2012中,叫做“SQL Server Data Tools”;而在SQL Server 2008中,名称叫做“Business Intelligence Development Studio”。
如果你缺少这些组件,你可以运行SQL Server安装程序并勾选相关组件,操作很简单。
配置分析工具
不管你启动哪个Visual Studio工作环境,都要创建一个集成服务项目。然后,从SSIS工具箱中拖拽一个数据分析任务到设计面板上,然后双击开始配置。
配置结果信息存储在XML文件中,所以需要指定保存文件的名称和路径。
点击目标旁边的空白框,会出现一个箭头。
点击箭头,然后点击“New File connection”。
在结果框中,指定路径和文件名(包括.xml后缀)。
点击“确定”按钮,然后点击“Quick Profile”按钮。
点击“ADO.NET Connection”旁边的“新建”按钮。
在出现的对话框中,指定SQL Server和托管待分析数据的数据库(我使用的是“AdventureWorksLT2012 ”数据库),然后点击“确定”按钮。
点击表或视图下拉框,选择待分析数据(我选用的是“SalesLT.Proct”)。
保留默认勾选的复选框,然后点击“确定”按钮。确定后就会回到主设计界面。
最后,按“F5”就可以开始分析了。
分析成功,在SQL Server 2008中会有一个绿色小框来显示,在SQL Server 2012中是个绿色小勾。如果你看到红色小框或者红叉,那么可以在“Progress ”标签页找到哪里出错了。
查看结果
假设你看到的是绿色(在集成服务中每个人都喜欢这个颜色),那么接下来启动“Data Profile Viewer”应用程序。在开始菜单中,它在“Microsoft SQL Server XXXX”文件夹的集成服务子文件夹下。
在查看器中,点击“打开”按钮,找到你之前配置的xml文件。你现在可以看到分析结果了。
“adventureWorks”库中的数据本来是干干净净的,所以我做了一些修改,你自己直接做的话看到的分析结果会不一样。
在查看器左侧面板中,你可以看到我们选择的表,它下面是数据分析的五个不同方面(也就是我们配置任务时默认选中的五项)。
点击“Candidate Key Profiles ”,就会在右侧面板中显示结果。
该信息展示了值的唯一性,你可以看看我的数据(修改过的),“名称”列包含的数据不是百分之百唯一的。
我可以点击“名称”列来查看更多,界面中“ Key Violations ”部分下面会显示更多信息。
错误的产品是“HL Road Frame – Black, 58”,问题是有两行有相同的名称(产品名称通常应该是唯一的)。
在“ Key Violations ”中的问题产品上点击,就会显示出需要关注的行。
在左侧面板中(+微信关注网络世界),点击“Column Length Distribution Profiles”。
功能正如其名,这个页面会分析每个列值的长度。
我这里显示的结果,“颜色”列包含列最小长度是2。
就像我们前面例子中所做的那样,我们可以向下钻取,我可以看到那些值的分布,进一步钻取我可以看到脏数据对应的实际行。
其它类型的分析操作都是类似的。
“Column NULL Ratio Profiles”显示了某一列中“NULL”值的百分比。
如果你有些列实际上不允许为“NULL”,例如“Proct Name”,那么这个功能就非常有用。
“Column Statistics Profiles ”显示了日期和数值的最小值、最大值、平均值以及标准偏差。对于识别“327岁的员工”与“价格为负数的产品”这类不合理数据非常有帮助。
“Column Value Distribution Profiles ”显示某一列中有多少不同的值。这对于处理像“性别”这种列是很有用的,你可能预期该列只有两个不同值,但是却找到了15个,很容易发现问题。
还有另外两个分析功能也是可用的,不过默认没有启用。
其中一个就是“Functional Dependency Profile ”,它可以找到那些依赖于其它列值得列。
这一条功能对于检查地址信息时很有用;例如,我们希望相同城市的地址共用相同的邮政编码。
总结
该分析工具的局限性在于,源数据必须存储在SQL Server数据库中。例如,如果你希望分析存储在平面文件中的数据,那么你必须先把数据导入到SQL Server数据库中。
此外,该分析工具不支持创建额外的定制分析功能实现扩展。你看到的所有功能就是它能提供的所有功能。
局限性且放一旁,SQL Server附带提供的这款工具为那些希望得到并能快速运行数据分析的人提供了很好的起点。
Ⅷ Python/PHP MySQL语句解析器解决业务分表
自己曾经做过一个网盘项目。刚开始由于需要快速地从0到1建设上线,所以没有对核心文档表进行分表。当然我的架构理念也是“按需架构设计”。产品需求在没有明确的长远计划的情况下以“小步快跑,赶超竞品”为主。后期由于产品功能触达目标用户群需求点、产品用户体验不断提升、产品多方位导流、加强产品推广文档表每天有百万数据增长量。不得不对文档表进行按用户id分表。当时产品功能已全覆盖文档的生命周期。产品功能已丰富多彩。修改所有关联文档表的业务代码为按用户id分表开发测试成本非常高。上线后线上问题不可控。经过考虑在业务代码最底层DB层进行SQL语句解析来进行用户id分表处理。这样的话开发测试成本都非常低。上线后有问题方便回滚和追查原因。
今天为大家介绍Python/PHP两种MySQL语句解析器。当时网盘项目用的是PHP编程语言开发。
Python的SQL语句解析器 。个人推荐使用moz_sql_parser库。经调研官方的sqlparse库解析出来的语句段无法满足需求也很难理解。
1、Python moz_sql_parser库安装
2、Python moz_sql_parser SQL语句解析
3、Python moz_sql_parser总结
PHP的SQL语句解析器。 个人推荐使用PhpMyAdmin的sql-parser组件。PhpMyAdmin是经过 历史 检验可信赖的。
1、PHP PhpMyAdmin/sql-parser安装
2、PHP PhpMyAdmin/sql-parser SQL语句解析
3、PHP PhpMyAdmin/sql-parser总结
大家有什么问题可以发评论沟通。
Ⅸ SQL查询分析器是否能提取数据资料及如何操作
可以将查询的结果导出.
写一个查询语句,比如 SELECT * FROM user;
执行查询语句,可以看见数据表中有内容
以navicat为例,
后面的下一步即可
Ⅹ sql server查询分析器,用sql语句往表中批量插入数据怎么做,看图.
参考如下:
导出到excel
EXEC master..xp_cmdshell 'bcp SettleDB.dbo.shanghu out c:\temp1.xls -c -q -S"GNETDATA/GNETDATA" -U"sa" -P""'
/*********** 导入Excel
SELECT *
FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',
'Data Source="c:\test.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...xactions
/*动态文件名
declare @fn varchar(20),@s varchar(1000)
set @fn = 'c:\test.xls'
set @s ='''Microsoft.Jet.OLEDB.4.0'',
''Data Source="'+@fn+'";User ID=Admin;Password=;Extended properties=Excel 5.0'''
set @s = 'SELECT * FROM OpenDataSource ('+@s+')...sheet1$'
exec(@s)
*/
SELECT cast(cast(科目编号 as numeric(10,2)) as nvarchar(255))+'' 转换后的别名
FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',
'Data Source="c:\test.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...xactions
/********************** EXCEL导到远程SQL
insert OPENDATASOURCE(
'SQLOLEDB',
'Data Source=远程ip;User ID=sa;Password=密码'
).库名.dbo.表名 (列名1,列名2)
SELECT 列名1,列名2
FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',
'Data Source="c:\test.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...xactions
/** 导入文本文件
EXEC master..xp_cmdshell 'bcp dbname..tablename in c:\DT.txt -c -Sservername -Usa -Ppassword'
/** 导出文本文件
EXEC master..xp_cmdshell 'bcp dbname..tablename out c:\DT.txt -c -Sservername -Usa -Ppassword'
或
EXEC master..xp_cmdshell 'bcp "Select * from dbname..tablename" queryout c:\DT.txt -c -Sservername -Usa -Ppassword'
导出到TXT文本,用逗号分开
exec master..xp_cmdshell 'bcp "库名..表名" out "d:\tt.txt" -c -t ,-U sa -P password'
BULK INSERT 库名..表名
FROM 'c:\test.txt'
WITH (
FIELDTERMINATOR = ';',
ROWTERMINATOR = '\n'
)
--/* dBase IV文件
select * from
OPENROWSET('MICROSOFT.JET.OLEDB.4.0'
,'dBase IV;HDR=NO;IMEX=2;DATABASE=C:\','select * from [客户资料4.dbf]')
--*/
--/* dBase III文件
select * from
OPENROWSET('MICROSOFT.JET.OLEDB.4.0'
,'dBase III;HDR=NO;IMEX=2;DATABASE=C:\','select * from [客户资料3.dbf]')
--*/
--/* FoxPro 数据库
select * from openrowset('MSDASQL',
'Driver=Microsoft Visual FoxPro Driver;SourceType=DBF;SourceDB=c:\',
'select * from [aa.DBF]')
--*/
/**************导入DBF文件****************/
select * from openrowset('MSDASQL',
'Driver=Microsoft Visual FoxPro Driver;
SourceDB=e:\VFP98\data;
SourceType=DBF',
'select * from customer where country != "USA" order by country')
go
/***************** 导出到DBF ***************/
如果要导出数据到已经生成结构(即现存的)FOXPRO表中,可以直接用下面的SQL语句
insert into openrowset('MSDASQL',
'Driver=Microsoft Visual FoxPro Driver;SourceType=DBF;SourceDB=c:\',
'select * from [aa.DBF]')
select * from 表
说明:
SourceDB=c:\ 指定foxpro表所在的文件夹
aa.DBF 指定foxpro表的文件名.
/*************导出到Access********************/
insert into openrowset('Microsoft.Jet.OLEDB.4.0',
'x:\A.mdb';'admin';'',A表) select * from 数据库名..B表
/*************导入Access********************/
insert into B表 selet * from openrowset('Microsoft.Jet.OLEDB.4.0',
'x:\A.mdb';'admin';'',A表)
文件名为参数
declare @fname varchar(20)
set @fname = 'd:\test.mdb'
exec('SELECT a.* FROM opendatasource(''Microsoft.Jet.OLEDB.4.0'',
'''+@fname+''';''admin'';'''', topics) as a ')
SELECT *
FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',
'Data Source="f:\northwind.mdb";Jet OLEDB:Database Password=123;User ID=Admin;Password=;')...产品
********************* 导入 xml文件
DECLARE @idoc int
DECLARE @doc varchar(1000)
--sample XML document
SET @doc ='
<root>
<Customer cid= "C1" name="Janine" city="Issaquah">
<Order oid="O1" date="1/20/1996" amount="3.5" />
<Order oid="O2" date="4/30/1997" amount="13.4">Customer was very satisfied
</Order>
</Customer>
<Customer cid="C2" name="Ursula" city="Oelde" >
<Order oid="O3" date="7/14/1999" amount="100" note="Wrap it blue
white red">
<Urgency>Important</Urgency>
Happy Customer.
</Order>
<Order oid="O4" date="1/20/1996" amount="10000"/>
</Customer>
</root>
'
-- Create an internal representation of the XML document.
EXEC sp_xml_preparedocument @idoc OUTPUT, @doc
-- Execute a SELECT statement using OPENXML rowset provider.
SELECT *
FROM OPENXML (@idoc, '/root/Customer/Order', 1)
WITH (oid char(5),
amount float,
comment ntext 'text()')
EXEC sp_xml_removedocument @idoc