SQLServer运维
由于工作的关系,我接收了一个很老很老的系统,他使用了SQL Server2008作为数据库,其实对于SQL Server数据库,学计算机的都不算陌生吧,我记得在大学的时候,刚开始学数据库的时候,学的就是SQL Server,像后来的MySQL,Orcal,芒果,都是在工作中学习或者是自学的,但是许久没有摸这一类数据库,还是不知道从何下手。
1.sqlserver 2008 r2 下载地址和序列号,可用迅雷下载 (使用迅雷下载开发版、企业版、标准版,并分别附上了密钥)
1.导入Excel数据源
我有一批数据,用excel格式存储,要导入数据库中,搜索教程,打开数据库的导入导出向导,死活找不到别人所说的excel数据源。
我尝试过安装特定版本的AccessDatabaseEngine,比如我电脑上安装了Office2010,我就安装了AccessDatabaceEngine2010版本的,但是结果在数据源中只是多了一个Access数据库的源,而没有Excel的源,而且还没有成功。无奈放弃了这个想法。后来发现在平面数据源中,有csv这一个选项,于是用Excel将xls格式的数据转换为csv,用csv文件导入数据库。
2.SQL Server导入数据
(1) 开始菜单->SQL Server 2008 R2->导入和导出数据(64位和32位随便选)
(2) 进入欢迎页面,下一步
(3) 数据源下拉列表中选择平面数据源,文件名选择自己要导入的csc文件,其他默认,也可以将列名作为字段名导入,选中在第一个数据行中显示列名称,点击下一步。
(4) 查看数据,下一步
(5) 修改导入到的数据库,下一步
(6) 编辑映射,默认都是50字符,没有特殊要求,下一步
(6) 下一步,下一步,完成就可以了。
3.导入csv数据文件时出现的数据类型错误
在知道如何将excel数据导入到数据库之后,也并不是一帆风顺的,总是遇见各种数据类型的问题。
文本截断错误:
数据类型错误:
数据丢失错误:
错误 0xc02020a1: 数据流任务 1: 数据转换失败。列“”的数据转换返回状态值 2 和状态文本“由于可能丢失数据,所以无法转换该值。 数据转换失败。列“”的数据转换返回状态值 2 和状态文本“由于可能丢失数据,所以无法转换该值
解决方式就是在导入数据的第三步中,查询数据一项,左侧有个高级选项,点击高级选项,选择自己要修改的属性字段,然后点击建议类型,如果建议类型最后也是自己需要的数据类型,那就手动修改DataType字段,比如我这里的发现时间,建议类型是日期[DT_DATE],但是实际上我的数据中并不全是可以转换成时间的字符出,还有诸如“不详”这种文本,所以使用建议的类型为日期[DT_DATE]就不合适,应该选择字符串类型[DT_STR]。
。当然可能还有一些其他的数据类型和转换错误,根据相应的提示,然后查看源数据类型,进行正确的数据类型和字段长度的选择即可。
注意
(1) 有一点需要的注意的就是,使用csv文件保存xls数据,使用的是逗号分隔,如果你的数据的某一个字段中的值本身包含了逗号,那么最后保存的csv文件,可能并不是你想要的行和列数据,这个时候试试保存为txt文件,使用制表符分隔列,一般的excel文件的单元格中不会存在制表符吧。
(3) 如果导入的数据中出现了多个空白行,也不要担心,使用delete from table where column1 is null and colunm2 is null;语句即可解决,其中table为自己的表名,colunm1和colunm2为自己列名,获着是delete from table where column1 =’’ and colunm2 =’’;
4.关于备份还原的相关操作
(1)“sqlserver还原时候报错:媒体集有2个媒体簇,但只提供了1个”的错误
备份的时候,选择备份的目标时,一定要只添加一个文件,否则就会备份到多个文件中,恢复的时候就会出现要选择多个文件的情况。
(2)恢复的时候要选择同名的数据库,如果不同名,想换一个数据库,那么就要在资源管理器->数据库右键->还原数据库->数据库名填写不存在的数据库名,文件选择备份的文件。
5.分页查询
sql server没有实现limit的操作,这就比较蛋疼了。
(1) 第一种就是使用top,感觉top有些不能满足要求,特别是没有id号的情况下。
(2) 第二种就是使用ROW_NUMBER() OVER(),这个感觉还是比较符合要求的。
1 | SELECT * FROM (SElECT *,ROW_NUMBER() OVER(Order by RecordTime) AS RowNumber FROM tableName) as b where RowNumber BETWEEN pageIndex-1*pageSize AND pageIndex*pageSize |
(3) 还有一种就是offset fetch next方式,这个只能是sql server 2012以上的版本,也不符合要求。
使用分页查询同时获取最大数量,主要使用了 COUNT (*) OVER () 方法。
1 | SELECT * FROM |
1.在SQL Server中实现 Limit m, n 的功能 (这篇只讲了使用top的方式)
2.三种SQLServer分页查询语句笔记 (这个就是三种方式,还有一个就是定义了一个存储过程)
3.《SQLServer》——常用的分页查询语句 (也是上面的三种方式)
6.视图错位
今天在查看数据库的时候,出现了视图错位的情况,如下图所示,其实这个MeterType中的数据,其实是SiteLocation中的数据。
创建视图的语句也非常的简单,使用了*的方式,只是把一张表里的数据,全部做成了一个视图,连表与表之间的连接也没有。
1 | CREATE VIEW [dbo].[V_siteinfo] |
解决方法就是使用sp_refreshview进行视图的手动刷新。我是用:Alter view vw_test,总是提示我语法错误。
1 | sp_refreshview 'V_siteinfo' |
1.sqlserver 问题来了,视图不会自动更新,如果是用*创建的 (这里有两种方法,可以尝试一下。)
2.sp_refreshview (Transact-SQL) (sp_refreshview语法)
3.SQL VIEW(视图) (sql视图及其创建)
7.无法附加文件
(1) 不是主数据库文件。
(2) 无法升级数据库 ,因为此版本的 SQL Server 不支持该数据库的非发布版本(539)。
【解决方法】
先用2008将2000的数据附加上,然后右键数据库,选择属性,然后将在选项里面,将兼容性级别改为 SQL Server 2008,保存,然后再分离,拷贝文件到高版本的数据库上进行附加就可以了。
1.无法升级数据库….因为此版本的 SQL Server 不支持该数据库的非发布版本(539) 解决方案 这个给了解决方法
2.SQLServer2008:附加数据库时出错。有关详细信息,请单击“消息”列中的超链接 一般都是.这个方案,解决文件夹权限问题
8.内存占用
1.SQL SERVER占用服务器内存过高的解决方案