SQLServer运维

标签: Sqlserver 分类: 数据库 创建时间:2019-05-15 02:23:29 更新时间:2025-01-17 10:39:22

由于工作的关系,我接收了一个很老很老的系统,他使用了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
2
SELECT * FROM 
(select row_number() over (order by RecordTime ) as ROW_COUNT , *,COUNT (*) OVER () AS total from secHis t where sectionId =?1 and (RecordTime between ?2 and ?3)) as b where ROW_COUNT between (?4-1)*?4 and ?4*?5
参考文章:
1.在SQL Server中实现 Limit m, n 的功能 (这篇只讲了使用top的方式)
2.三种SQLServer分页查询语句笔记 (这个就是三种方式,还有一个就是定义了一个存储过程)
3.《SQLServer》——常用的分页查询语句 (也是上面的三种方式)

6.视图错位

今天在查看数据库的时候,出现了视图错位的情况,如下图所示,其实这个MeterType中的数据,其实是SiteLocation中的数据。

创建视图的语句也非常的简单,使用了*的方式,只是把一张表里的数据,全部做成了一个视图,连表与表之间的连接也没有。

1
2
3
4
CREATE VIEW [dbo].[V_siteinfo]
AS
SELECT dbo.siteinfo.*
FROM dbo.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,保存,然后再分离,拷贝文件到高版本的数据库上进行附加就可以了。

8.内存占用

小额赞助
本人提供免费与付费咨询服务,感谢您的支持!赞助请发邮件通知,方便公布您的善意!
**光 3.01 元
Sun 3.00 元
bibichuan 3.00 元
微信公众号
广告位
诚心邀请广大金主爸爸洽谈合作
每日一省
isNaN 和 Number.isNaN 函数的区别?

1.函数 isNaN 接收参数后,会尝试将这个参数转换为数值,任何不能被转换为数值的的值都会返回 true,因此非数字值传入也会返回 true ,会影响 NaN 的判断。

2.函数 Number.isNaN 会首先判断传入参数是否为数字,如果是数字再继续判断是否为 NaN ,不会进行数据类型的转换,这种方法对于 NaN 的判断更为准确。

每日二省
为什么0.1+0.2 ! == 0.3,如何让其相等?

一个直接的解决方法就是设置一个误差范围,通常称为“机器精度”。对JavaScript来说,这个值通常为2-52,在ES6中,提供了Number.EPSILON属性,而它的值就是2-52,只要判断0.1+0.2-0.3是否小于Number.EPSILON,如果小于,就可以判断为0.1+0.2 ===0.3。

每日三省
== 操作符的强制类型转换规则?

1.首先会判断两者类型是否**相同,**相同的话就比较两者的大小。

2.类型不相同的话,就会进行类型转换。

3.会先判断是否在对比 null 和 undefined,是的话就会返回 true。

4.判断两者类型是否为 string 和 number,是的话就会将字符串转换为 number。

5.判断其中一方是否为 boolean,是的话就会把 boolean 转为 number 再进行判断。

6.判断其中一方是否为 object 且另一方为 string、number 或者 symbol,是的话就会把 object 转为原始类型再进行判断。

每日英语
Happiness is time precipitation, smile is the lonely sad.
幸福是年华的沉淀,微笑是寂寞的悲伤。