SQL Server 数据库部分常用语句小结(二)
9. 查询备份还原数据库的进度。
select command
,percent_complete
,est_time_to_go=convert(varchar,(estimated_completion_time/3600000))+' hour, '
+convert(varchar,(estimated_completion_time)/60000)+' min, '
+convert(varchar,(estimated_completion_time)/1000)+' sec'
,start_time=convert(char(16),start_time,120)
,est_completion_time=convert(char(16),dateadd(second,estimated_completion_time/1000,getdate()),120)
,running_time=convert(varchar,((datediff(s,start_time,getdate()))/3600))+' hour, '
+convert(varchar,(datediff(s,start_time,getdate()))/60)+' min, '
+convert(varchar,(datediff(s,start_time,getdate())))+' sec'
,s.text
from sys.dm_exec_requests r
cross apply sys.dm_exec_sql_text(r.sql_handle) s
where r.command in ('backup database','restore database','backup log','restore log','dbccfilescompact','dbccspacereclaim')
10. 删除指定表内的某个统计信息(例如,有时候,我们在alwayson可用性组的副库上执行某个查询,会提示某个统计信息缺失)。
语法
drop statistics table.statistics_name | view.statistics_name [ ,...n ]
11. sql server 2012 关于序列 的基本操作【在对应db下执行】。
select * from sys.sequences
-- 获取下一个值
select next value for [dbo].[自定义的序列名称];
-- 重置为1
alter sequence [dbo].[自定义的序列名称] restart with 1 ;
12. 自增列(identity(1,1))的数据导入。
2个表都有自增列(identity(1,1)),怎么才能导入数据呢?
例如,我想将含有identity(1,1)列的大表qq_camptask_t1,rename成一张旧表qq_camptask,接下来还要把其中部分数据导入到新建的qq_camptask_t1 中,新产生的表还是有identity(1,1),此时导入数据,这个列就会报错。
消息 8101,级别 16,状态 1,第 1 行
仅当使用了列列表并且 identity_insert 为 on 时,才能为表qq_camptask_t1'中的标识列指定显式值。
解决方案
set identity_insert qq_camptask_t1【表名】 on
此效用就在同一个回话中有效,其它不行。另外 还需要特别注意的是:一定要写明 列名。
例如:
set identity_insert qq_camptask_t1 on
insert into qq_camptask_t1 ([id],[createtime])
select [id],[createtime] from qq_camptask
13. 修table的改列名。
exec sp_rename '表名.[原列名]', '新列名', 'column'
14. 赋予指定账户查看执行计划的权限。
grant showplan to [xxx_test] ---账号是xxx_test;在指定数据库下执行
15. sql语句执行耗费资源统计分析。
set statistics profile on
set statistics io on
set statistics time on
go
--写sql语句的地方
------------
go
set statistics profile off
set statistics io off
set statistics time off
16. 增加约束:如果表的某一列没有约束,而要在此列增加约束。
类似命令 如下:
alter table [dbo].[表明] add default ((默认值)) for [列名]
17. sqlserver 服务器更改主机名后,需要做一些操作,不然维护计划 以及订阅发布都会有问题。有时修改计算机名后,执行select @@servername仍返回原来的计算机名,表示"实例"并没有随着修改。
use master;
go
if serverproperty('servername')<>@@servername
begin
declare @server sysname;
set @server=@@servername;
exec sp_dropserver @server=@server;
set @server=cast(serverproperty('servername')as sysname );
exec sp_addserver @server=@server,@local='local';
end
go
(我们重启一下服务.ok)
18. 出现性能瓶颈时,执行以下代码,检查瓶颈代码。
sp_lock
dbcc inputbuffer(xxx) ---xxx 出现多次的spid
19. 查询表的大小
sp_spaceused 'rel_orderitem'
20. 字符与ascii码相互转化,有的时候要对数据清理,所以有必要了解一下。
例如 char("9") tab(水平制表符)
char("10") 换行
char("11") tab(垂直制表符)
char("12") 换页
char("13") 回车 chr(13)&chr(10) 回车和换行的组合
char("32") 空格 space
(1)获取字符的ascii码 ascii
ascii码是对字符的标准编码。要获取字符的ascii码可以通过ascii函数来实现。
语法:ascii(espression)--这里的expression是一个返回char或varchar数据类型的表达式,ascii函数仅对表达式最左侧的字符返回ascii码值。
例如:select ascii('f') --输出 102
(2)获取ascii码对应的字符 char
语法:char(integer_expression)
例如:select char(102) -- 输出f
上一篇: 多叉树结构的数据,parent表示法转成children表示法
下一篇: 移动端自适应