sqlserver向下兼容性。。。差的要死,在高版本sql上的备份在低版本根本不能恢复


1 安装时不断需要重启

删除注册表键HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\PendingFileRenameOperations,然后再试一下


2 停止sqlserver2008 r2 后,发现无法启动

cmd

net start mssqlserver

net stop mssqlserver


3  一些sql

时间与字符串:

print getdate() //打印当前时间
convert(datetime, '2014-07-01 12:10:01.123', 120)// 将字符串转换为datetime,120代表时间格式
CONVERT(varchar(10),replace('"123"345"',‘"’,'')) // 先将字符串的  双引号”  去掉,然后将字符串截断取前10个

SELECT STUFF('ABCDE',3,1,' ') 将第三位 C改为空格

//先将所有的双引号替换为 空,和将” . “替换为” : “,将11位的 ” - “替换为空,将18位的” : “ 替换为 ” . “。

最后将的到的字符串转换为,datetime2(7) ,注意18 位被改为 ” : “要改回 ” . “,否则 7位小数的datetime2 将转换失败

print (convert  (datetime2(7),STUFF( STUFF(replace(replace('2014-01-12-13.2.3.12345633','"',''),'.',':'),11,1,' '),18,1,'.'),120))


获取了表的列数:

select count(1) from syscolumns where id = object_id('tableName')

获取记录的条数:

方法一:最慢(数据几百万条,慎用)

select count(*) as c from tableA

方法二:

你希望相对快速地得到精确的表的记录总数,那么你有两种选择,建  聚簇索引  或者先  DBCC   再使用上述方法。

MS SQL 数据库中每个表都在sysindexes 系统表中拥有至少一条记录,该记录中的rows 字段会定时记录表的记录总数。

但是sysindexes中的数据是定时更新的,所以不一定和当前的表的数目相同



获取数据库内,所有表的记录数目

use dbname

select id,object_name(id) as tableName,indid,rows,rowcnt  from sys.sysindexes where indid in(0,1)   

获取指定表的列

select rows from sysindexes where id = object_id( 'tableName' ) and indid in (0,1) 

强制将当前的记录总数更新到sysindexes

DBCC UpdateUSAGE(gd_fee0804,[tb_road]) WITH ROW_COUNTS (没有执行成功。。。。)????


sqlserver建立索引

在表的属性列里面就有索引项,有单机按步骤走???????




回收内存

方法一:重启,可以写成bat文件,然后在windows定时任务中,定时执行

net stop mssqlserver

net stop  sqlserveragent

net start mssqlserver 


 sqlserveragent


方法二: 学习中




内存限制:在数据库的属性里面有,默认 2008r2支持2047T的内存,汗啊




从数据库硬盘目录的文件,恢复数据库


database.mdf


database_log.LDF


数据库name--右单机:附加,即可



删除数据库的 log


方法一:可视


数据库name--右单机 -- 分离(将数据库从 ,sqlserver的实例中删除)


在硬盘上手动删除 log


重新  附加  数据库


http://msdn.microsoft.com/zh-cn/library/ms190794.aspx






方法二:代码


查看所有数据库的信息


SELECT NAME, recovery_model_desc FROM sys.databases


将数据库的回复模式从 full 改为 simple


ALTER DATABASE databaseName   SET Recovery simple


得到log日志的名字(得到的数据库和日至文件的名字可能与本地文件实际的名字不完全一样,但是就用那个)


USE  databaseName   SELECT NAME, size FROM sys.database_files


将日志收缩到10M(假设得到名字 data_log)


DBCC SHRINKFILE (N'data_log' , 10)



将mysql的数据导入sqlserver总是乱码错误(终极方案)

1 先用Utroedit将字段转码为:unicode

2 bulk insert   dbo.tb_spider_traffic from "d:\xxxxxx.txt"
   with (FIELDTERMINATOR ='\t') //用‘\t’作为换行符

OK


举例:


1 select * from char_test  where LEN(char2)=2 //取列char2中,有2个字符的记录。如:"中国","中a","ab"都是两个字符,但是他们所占的字节数不同
2 多个表查找相同的结果进行合并,Union 去重,union all不去重


select * from A   


union
select * from B