内嵌或嵌入SQL和存储过程之对比

 更新时间:2016年11月25日 16:40  点击:2238
问:为什么我的内嵌SQL或嵌入SQL 要比我的存储过程运行的快?
答:重编译可能是存储过程运行比较慢的原因。要确认这一点,您需要做一些性能测试,例如:看一下每种类型的查询和调用存储过程的“showplan”情况,并比较查询计划的高速缓存命中率和高速缓存缺失率。您还可以试着在存储过程内部为引用表、视图和过程写出对象拥有者。如下面例子所示:
SELECT * FROM dbo.mytable
这样有助于您重新使用计划并防止高速缓存缺失。
 


问:怎样才能将XML文件导入SQL Server 2000?
答:将XML文件导入SQL Server有若干种方法,这里提供其中的3种:
大容量装载COM接口。如果需要将文档的实体和属性析取到关系表中,最快的方法就是使用SQL Server 2000 Extensible Markup Language 3.0 Service Pack 1(SQLXML 3.0 SP1)提供的大容量装载COM接口。大容量状态COM接口包含在SQLXML 3.0 SP1的免费下载中。
textcopy.exe命令行实用工具。如果不希望将文档的实体和属性析取到关系表中,您可以使用textcopy.exe命令行实用工具。Textcopy.exe是将文本和image数据类型从单一服务器行或列移入或移出的优秀工具。
数据转换服务(DTS)。如果XML文档很简单,您可以使用DTS将信息逐行析取到表中。这一方法要求您将XML文件定义为输入数据源,将数据库表定义为输出数据源,并编写ActiveX脚本剖析"<"和">"方式的字符输入,以析取实体、属性及其值。
 


所谓的数据传输,其实是指SQLServer访问Access、Excel间的数据。
为什么要考虑到这个问题呢?
由于历史的原因,客户以前的数据很多都是在存入在文本数据库中,如Acess、Excel、Foxpro。现在系统升级及数据库服务器如SQLServer、ORACLE后,经常需要访问文本数据库中的数据,所以就会产生这样的需求。前段时间出差的项目,就是面临这样的一个问题:SQLServer和VFP之间的数据交换。
要完成标题的需要,在SQLServer中是一件非常简单的事情。
通常的可以有3种方式:1、DTS工具 2、BCP 3、分布式查询
DTS就不需要说了,因为那是图形化操作界面,很容易上手。
这里主要讲下后面两们,分别以查、增、删、改作为简单的例子:
下面废话就不说了,直接以T-SQL的形式表现出来。
一、SQLServer和Access
1、查询Access中数据的方法:
select * from OpenRowSet('microsoft.jet.oledb.4.0',';database=c:db2.mdb','select * from serv_user')

select * from OpenDataSource('Microsoft.Jet.OLEDB.4.0','Data Source="c:DB2.mdb";User ID=Admin;Password=')...serv_user
2、从SQLServer向Access写数据:
insert into OpenRowSet('microsoft.jet.oledb.4.0',';database=c:db2.mdb','select * from Accee表')
select * from SQLServer表
或用BCP
master..xp_cmdshell'bcp "serv-htjs.dbo.serv_user" out "c:db3.mdb" -c -q -S"." -U"sa" -P"sa"'
上面的区别主要是:OpenRowSet需要mdb和表存在,BCP会在不存在的时候生成该mdb
3、从Access向SQLServer写数据:有了上面的基础,这个就很简单了
insert into SQLServer表 select * from
OpenRowSet('microsoft.jet.oledb.4.0',';database=c:db2.mdb','select * from Accee表')
或用BCP
master..xp_cmdshell'bcp "serv-htjs.dbo.serv_user" in "c:db3.mdb" -c -q -S"." -U"sa" -P"sa"'
4、删除Access数据:
delete from OpenRowSet('microsoft.jet.oledb.4.0',';database=c:db2.mdb','select * from serv_user')
where lock=0
5、修改Access数据:
update OpenRowSet('microsoft.jet.oledb.4.0',';database=c:db2.mdb','select * from serv_user')
set lock=1
SQLServer和Access大致就这么多。
二、SQLServer和Excel
1、向Excel查询
select * from OpenRowSet('microsoft.jet.oledb.4.0','Excel 8.0;HDR=yes;database=c:ook1.xls;','select * from [Sheet1$]') where c like '%f%'
问:为什么SQL Server不允许在视图定义使用ORDER BY子句?
答: SQL Server之所以不允许在视图定义中使用ORDER BY子句是为了遵守ANSI SQL-92标准。因为对该标准的原理分析需要对结构化查询语言(SQL)的底层结构和它所基于的数学理论进行讨论,我们不能在这里对它进行充分的解释。但是,如果你需要在视图中指定ORDER BY子句,可以考虑使用以下方法:
USE pubs
GO
CREATE VIEW AuthorsByName
AS
SELECT TOP 100 PERCENT *
FROM authors
ORDER BY au_lname, au_fname
GO
Microsoft在SQL Server 7.0中引入的TOP结构在同ORDER BY子句结合使用时是非常有用的。只有在同TOP关键词结合使用时,SQL Server才支持在视图中使用ORDER BY子句。
 
注意:TOP关键词是SQL Server对ANSI SQL-92标准的扩展。
 


在配置向导的下一个窗口中,系统询问你是否希望将MySQL安装为一项Windows服务,以及这项服务是否应随服务器一同启动。另外,还要求你决定是否将MySQL命令添加到Windows路径中。我做出明智选择,让MySQL服务随操作系统一起启动,并选择修改系统路径。(图11)

网络服务器和数据库的安全也是重要的因素。同样,你应该为数据库服务器设定一个安全的根密码;如果不是完全必要,禁止远程根访问,并且不要建立匿名账户。(图12)

安全设置是向导中的最后配置项。一旦设置完成,向导准备进行配置,将配置信息写入C:Program Files [{x86}]MySQLMySQL Server 5.0my.ini文件中,然后启动数据库服务。
现在,你已经建立了一个运行正常的MySQL数据库服务器。现在我们转向PHP
第四步:安装并配置PHP
这可能是整个过程中最难的部分。让PHP与IIS 6协作有时是一种挑战。下面我将进行完整的说明。

[!--infotagslink--]

相关文章

  • 金额阿拉伯数字转换为中文的存储过程

    Create Procedure AtoC @ChangeMoney Money as Set Nocount ON Declare @String1 char(20) Declare @String2 char(30) ...2016-11-25
  • PHP操作MSSQL存储过程修改用户密码

    存储过程在数据库的应用中我们用到的非常的多了,下面我们来看一篇关于PHP操作MSSQL存储过程修改用户密码的例子,具体的如下所示。 mssql2008 存储过程 下面可以直接...2016-11-25
  • Vue基于localStorage存储信息代码实例

    这篇文章主要介绍了Vue基于localStorage存储信息代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-11-16
  • MySql存储过程之逻辑判断和条件控制

    具体详情请看下文小编给大家带来的知识点。同编写程序类似,存储过程中也有对应的条件判断,功能类似于if、switch。在MySql里面对应的是IF和CASE1、IF判断IF判断的格式是这样的:IF expression THEN commands [ELSEIF ex...2015-10-21
  • PHP调用MySQL存储过程并返回值实现程序

    本文章来给大家详细介绍在php中如何来调用执行mysql存储过程然后返回由存储过程返回的值了,有需要了解的同学可进入参考。 。调用存储过程的方法。 a。如果存储过...2016-11-25
  • 将matplotlib绘图嵌入pyqt的方法示例

    这篇文章主要介绍了将matplotlib绘图嵌入pyqt的方法示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-04-27
  • Mysql中存储UUID去除横线的方法

    参考:http://stackoverflow.com/questions/412341/how-should-i-store-guid-in-mysql-tables通常用UUID做唯一标识,需要在数据库中进行存储。UUID的格式 复制代码 代码如下: String string = UUID.randomUUID().toStrin...2015-03-15
  • C#调用存储过程详解(带返回值、参数输入输出等)

    这篇文章主要介绍了C#调用存储过程的方法,结合实例形式详细分析了各种常用的存储过程调用方法,包括带返回值、参数输入输出等,需要的朋友可以参考下...2020-06-25
  • mysql存储过程实现split示例

    复制代码 代码如下:call PROCEDURE_split('分享,代码,片段',',');select * from splittable;复制代码 代码如下:drop PROCEDURE if exists procedure_split;CREATE PROCEDURE `procedure_split`( inputstring varc...2014-05-31
  • 详解JS变量存储深拷贝和浅拷贝

    这篇文章主要介绍了JS变量存储深拷贝和浅拷贝,想深入了解JS的同学,可以参考下...2021-05-04
  • c#调用存储过程实现登录界面详解

    c#调用存储过程实现登录界面详解...2020-06-25
  • C++实现数据文件存储与加载

    这篇文章主要为大家详细介绍了C++实现数据文件存储与加载,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2020-04-25
  • c#获取存储过程返回值示例分享

    这篇文章主要介绍了C#获取存储过程返回值的方法,大家参考使用吧...2020-06-25
  • Java Spring动态生成Mysql存储过程详解

    这篇文章主要介绍了Java Spring动态生成Mysql存储过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-06-04
  • 分布式文档存储数据库之MongoDB备份与恢复的实践详解

    这篇文章主要介绍了分布式文档存储数据库之MongoDB备份与恢复,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2020-12-08
  • 关于AngularJs数据的本地存储详解

    本文主要介绍了每一个独立的JS文件或者不同的控制器如何实现数据的共享与交互的方法。具有一定的参考价值,下面跟着小编一起来看下吧...2017-01-23
  • MySQLMerge存储引擎

    MERGE存储引擎把一组MyISAM数据表当做一个逻辑单元来对待,让我们可以同时对他们进行查询。本文给大家介绍MySQLMerge存储引擎,需要的朋友参考下吧...2016-03-27
  • 在ACCESS 中调用后台存储过程

    ACCESS是一个Client/Server的优秀前端开发工具,具有易学易用,界面友好,开发简单,和其他数据库接口灵活。但是,它要对大量数据处理时,速度比较慢。深圳供电局现有60万用户,下...2016-11-25
  • C#调用Oracle存储过程的方法

    这篇文章主要介绍了C#调用Oracle存储过程的方法,包含数据库及C#对应的调用代码,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25
  • oracle 存储过程、函数和触发器用法实例详解

    这篇文章主要介绍了oracle 存储过程、函数和触发器用法,结合实例形式详细分析了oralce 存储过程、函数和触发器具体功能、原理、定义、使用方法及相关操作注意事项,需要的朋友可以参考下...2020-07-11