重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
尽量避免使用游标,因为游标的效率较差,如果游标操作的数据超过1万行,那么就应该考虑改写。
创新互联公司专注于泗县企业网站建设,成都响应式网站建设公司,商城网站制作。泗县网站建设公司,为泗县等地区提供建站服务。全流程定制网站开发,专业设计,全程项目跟踪,创新互联公司专业和态度为您提供的服务
使用基于游标的方法之前,应先寻找基于集的解决方案来解决问题,基于集的方法通常更有效。
最好的改进光标性能的技术就是:能避免时就避免使用游标
若有时无法避免使用游标,则可以用如下技巧来优化游标的性能。
(1). 除非必要否则不要使用static/insensitive游标。打开static游标会造成所有的行都被拷贝到临时表。这正是为什么它对变化不敏感的原因——它实际上是指向临时数据库表中的一个备份。很自然,结果集越大,声明其上的static游标就会引起越多的临时数据库的资源争夺问题。
(2). 除非必要否则不要使用keyset游标。和static游标一样,打开keyset游标会创建临时表。虽然这个表只包括基本表的一个关键字列(除非不存在唯一关键字),但是当处理大结果集时还是会相当大的。
(3). 当处理单向的只读结果集时,使用fast_forward代替forward_only。使用fast_forward定义一个forward_only,则read_only游标具有一定的内部性能优化。
(4). 使用read_only关键字定义只读游标。这样可以防止意外的修改,并且让服务器了解游标移动时不会修改行。
(5). 小心事务处理中通过游标进行的大量行修改。根据事务隔离级别,这些行在事务完成或回滚前会保持锁定,这可能造成服务器上的资源争夺。
(6). 小心动态光标的修改,尤其是建在非唯一聚集索引键的表上的游标,因为他们会造成“Halloween”问题——对同一行或同一行的重复的错误的修改。因为SQL Server在内部会把某行的关键字修改成一个已经存在的值,并强迫服务器追加下标,使它以后可以再结果集中移动。当从结果集的剩余项中存取时,又会遇到那一行,然后程序会重复,结果造成死循环。
(7). 对于大结果集要考虑使用异步游标,尽可能地把控制权交给调用者。当返回相当大的结果集到可移动的表格时,异步游标特别有用,因为它们允许应用程序几乎马上就可以显示行
检测SqlServer数据库是否能连接的小技巧
连接数据库,try catch 判断,
抛出异常就连接不上了,再判断连接的状态。
在SQL Server中集成了很多成批导入数据的方法。
一、使用Select Into语句
若企业数据库都采用的是SQL Server数据库的话,则可以利用Select Into语句来实现数据的导入。Select Into语句,作用就是把数据从另外一个数据库中查询出来,然后加入到某个用户指定的表中。
在使用这条语句的时候,需要注意几个方面的内容。
1、需要在目的数据库中先建立相关的表。如想把进销存系统数据库(SQLServer)中的产品信息表(Product)导入到ERP系统中的产品信息表(M_Product)中。则前期是在ERP系统的数据库中已经建立了这张产品信息表。
2、这种方法只复制表中的数据,而不复制表中的索引。如在进销存系统数据中的产品信息表中,在产品编号、产品种类等字段上建立了索引。则利用Select Into语句把数据复制到ERP系统的表中的时候,只是复制了数据内容的本身,而不会复制索引等信息。
3、这条语句使用具有局限性。一般情况下,这只能够在SQL Server数据库中采用。不过,对于SQL Server不同版本的数据库,如2008或者2003,还都是兼容的。若需要导入的对象数据库不是SQL Server的,则需要采用其他的方法。
4、采用这条语句的话,在目的表中必须不存在数据。否则的话,目的表中的数据会被清除。也就是说,这个语句不支持表与表数据的合并。在SQL Server中,有一条类似的语句,可以实现这个功能。这条语句就是:Insert Into。作用就是把另外一张表中的数据插入到当前表中。若用户想要的时表与表数据的合并,则可以采用这条语句。两者不能够混淆使用,否则的话,很容 易导致数据的丢失。
5、以上两条语句都支持兼容的不同类型的数据类型。如在原标中,某个字段的数据类型是整数型,但是在目的表中这个字段的数据类型则是浮点型,只要这个两个数据类型本来就兼容的,则在导入的时候,数据库是允许的。
另外再补上一个小技巧:
想复制表a的所有字段名到一个新表b的时候,可以使用以下方法:
1)select * into b from a where 11 (仅SQL Server可用)
2)select top 0 * into b from a
二、利用Excel等中间工具进行控制
1、虽然第一种方法操作起来比较简单,但是其也有一些缺点。如只支持同一种类型的数据库;不能够对数据进行过多的干预等等。一般情况下,若用户原数据准确度比较高,不需要过多的修改就可以直接拿来用的话,则就已采用第一种方式。
2、但是,若在原数据库中,数据的准确度不是很高,又或者,有很多数据是报废的。总之,需要对原数据库的数据进行整理,才能够使用的情况,不建议先导入进去,再进行更改。在遇到这种情况时,喜欢利用Excle作为中间工具。也就是说,先把数据中原数据库中导到Excle中。有些数据库,如 Oracle数据库,不支持Excle格式。但是,可以导为CSV格式的文件。这种文件Excle也可以打得开。
3、然后,再在Excle中,对记录进行修改。由于Excle是一个很强的表格处理软件,所以,其数据修改,要比在数据库中直接修改来得方便,来得简 单。如可以利用按时间排序等功能,把一些长久不用的记录清楚掉。也可以利用替换等功能,把一些不规范的字符更改掉。这些原来在数据库中比较复杂的任务,在 Excle等工具中都可以轻松的完成。
4、等到表中的内容修改无误后,数据库管理员就可以把Excle表格中的文件直接导入到SQL Server数据库中。由于SQL Server与Excel是同一个父母生的,所以,之间的兼容性很好。在Sql Server中提供了直接从Excel文件中导入数据的工具。
5、虽然这要借助中间工具导入数据,但是,因为其处理起来方便、直观,所以,在大部分时候都是采用这种方式。
最后,再附上如何让Excel表格在数据库中能查看到的相关代码:
exec sp_addlinkedserver 'excel','ex','Microsoft.Jet.OLEDB.4.0','C:\Documents and Settings\Administrator\桌面\abc.xls',null,'Excel 5.0' --创建一个名为excel的连接服务,可以查看到abc.xls里面的内容
EXEC sp_addlinkedsrvlogin 'excel', 'false', 'sa', 'Admin', NULL --创建一个映射以允许 SQL Server 登录 sa 使用 Excel 登录 Admin 连接到 excel,并且没有密码
--exec sp_dropserver 'excel' --删除连接
select * from excel...Sheet1$ --查看Excel的Sheet1表里面的内容
一、建立索引
二、建立存储过程
三、只查询您所需要的数据,不要把所有数据都查询出来,防止数据冗余。
四、对于大量及海量数据一般还要建立分区