This website requires JavaScript.

[译]MSSQL:使用SQL Prompt 快速使用十大常用脚本

我之前有篇Top 10 Most Common Database Scripts  的文章,这个排名是由SQLServerCentrol社区投票的.我们的DBA经常会用到.不过如果你像我这样比较懒惰..那么肯定会想办法方便的执行这些脚本,比如敲两个字代替二十个字.

在本文中.我会向你展示,使用Redget SQL Prompt 设置Snippet来快速输入这些脚本.

#1 sp_who2 / sys.dm_exec_requests / sp_whoisactive

第一个语句是动态管理对象.用来显示你当前系统正在执行的查询,和查询计划等.这个打起来要一会儿时间,在此我们创建一个Snippet 名字为rn 意为right now .如下图

/rn/ SELECT  SUBSTRING(dest.text, ( der.statement_start_offset / 2 ) + 1, ( CASE der.statement_end_offset WHEN -1 THEN DATALENGTH(dest.text) ELSE der.statement_end_offset - der.statement_start_offset END ) / 2 + 1) AS querystatement , deqp.query_plan , der.session_id , der.start_time , der.status , DB_NAME(der.database_id) AS DBName , USER_NAME(der.user_id) AS UserName , der.blocking_session_id , der.wait_type , der.wait_time , der.wait_resource , der.last_wait_type , der.cpu_time , der.total_elapsed_time , der.reads , der.writes FROM    sys.dm_exec_requests AS der CROSS APPLY sys.dm_exec_sql_text(der.sql_handle) AS dest CROSS APPLY sys.dm_exec_query_plan(der.plan_handle) AS deqp;

#2 STATISTICS IO/TIME

你可能会想STATISTICS IO 花不了多少时间,所以..有必要节省这么点时间么?事实上,设置ONOFF是很快的,但是Prompt有个placeholder的功能,让我们用起来更方便.

下图是Snippet的配置:

/ssit/ SET STATISTICS IO ON; SET STATISTICS TIME ON; $SELECTEDTEXT$$CURSOR$ SET STATISTICS IO OFF; SET STATISTICS TIME OFF;
$SELECTEDTEXT$ 和$CURSOR$  是占位符,你使用这个Snippet的时候光标会直接定位到on off之间,直接把代码贴进去就可以了.很方便. 如果你用的是Prompt7以上的版本,当你选中一段SQL之后,左边会出现Prompt的图标.里面输入Snippet就可以看到效果了.ONOFF分别在我们选定语句的两边

#3 BACKUP DATABASE

关于BACKUP DATABASE 命令,我来快速创建一个带WITH COPY_ONLY字句的备份配置如下

/bu/ BACKUP DATABASE $DatabaseName$ TO DISK = 'C:\bu$DatabaseName$.bak' WITH COPY_ONLY;
当我们使用的时候太会直接在占位符的地方提示我们输入数值,相同的占位符会全部替换掉

#4 sp_help

SQL Prompt已经内置了这个Snippet 名为sph,不过我改了一下,后面加了个分号

/sps/ EXEC sys.sp_spaceused @objname = N'$ObjectName$', @updateusage = '$UpdateUsage$';

#5 DBCC SQLPERF

这个没有什么好改的了.直接配置上去

/dsp/ DBCC SQLPERF (LOGSPACE);

#6 sys.dm_exec_query_stats

这个是对已完成查询的,之前查询计划缓存中统计,与之前的rn sys.dm_exec_requests 不同,这个我们称作 nrn 'Not Right Now'

/nrn/ SELECT  SUBSTRING(dest.text, ( deqs.statement_start_offset / 2 ) + 1, ( CASE deqs.statement_end_offset WHEN -1 THEN DATALENGTH(dest.text) ELSE deqs.statement_end_offset - deqs.statement_start_offset END ) / 2 + 1) AS querystatement , deqp.query_plan , deqs.execution_count , deqs.total_worker_time , deqs.total_logical_reads , deqs.total_elapsed_time FROM    sys.dm_exec_query_stats AS deqs CROSS APPLY sys.dm_exec_sql_text(deqs.sql_handle) AS dest CROSS APPLY sys.dm_exec_query_plan(deqs.plan_handle) AS deqp$CURSOR$;

#7 RESTORE DATABASE

这里重新用了 $DatabaseName$ 占位符

/rd/ RESTORE DATABASE $DatabaseName$ FROM DISK = 'D:\bu$DatabaseName$.bak' WITH REPLACE, NORECOVERY;

#8 RESTORE FILELISTONLY

同样的RESTORE FILELISTONLY 虽然简单,但是还是能省下一些时间 ( 2333…我觉得像我这样几百年都用不了一次这种命令的..光是让我想起来这个Snippet都要不少时间)

/rf/ RESTORE FILELISTONLY FROM DISK = '$PASTE$'; GO

#9 sp_spaceused

设置一个有默认值的Snippet是相当方便的,如下图

/sps/ EXEC sys.sp_spaceused @objname = N'$ObjectName$', @updateusage = '$UpdateUsage$';

#10 DBCC SHOW_STATISTICS

DBCC SHOW_STATISTICS('$TableName$','$Statistic$'); GO

参考

原文 https://www.simple-talk.com/sql/t-sql-programming/using-sql-prompt-to-accelerate-the-top-10-most-common-database-scripts/ Prompt设置文件https://www.simple-talk.com/content/file.ashx?file=11993 Top10 SQL 脚本 https://www.simple-talk.com/content/file.ashx?file=11994

0条评论
avatar