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

 

(0)
上一篇 2022年3月21日
下一篇 2022年3月21日

相关推荐