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