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可用性组的副库上执行某个查询,会提示某个统计信息缺失)。
报错信息
消息 2767,级别 16,状态 1,过程 sp_table_statistics2_rowset,第 105 行
无法在系统目录中找到统计信息 'XXXXXX'。
语法
DROP STATISTICS table.statistics_name | view.statistics_name [ ,...n ]
这个命令在副库上执行,如果提示 无法对 统计信息 '‘XXXXXXX’' 执行 删除,因为它不存在,或者您没有所需的权限。
此时 可转到主库上尝试执行。
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
21 获取SQL Server 实例的机器名和Server IP。
获取机器名的SQL语句
SELECT SERVERPROPERTY('MachineName')
SELECT @@SERVERNAME
获取Server IP (服务器和客户端)
SELECT SERVERNAME = CONVERT(NVARCHAR(128),SERVERPROPERTY('SERVERNAME')) 
,LOCAL_NET_ADDRESS AS 'IPAddressOfSQLServer'
,CLIENT_NET_ADDRESS AS 'ClientIPAddress'
 FROM SYS.DM_EXEC_CONNECTIONS WHERE SESSION_ID = @@SPID
22 . 统计IP地址段(C段)
在CMDB系统中,会有一张表用来存放各服务器的IP地址的,如果我们希望统计到C段(即???.???.???.***)
select distinct REVERSE(SUBSTRING( REVERSE(IP),charindex('.',REVERSE(IP),1)+1,LEN(IP)-charindex('.',REVERSE(IP),1)+1)) + '.*' as 'ServerIP' from [dbo].[CMDB_ServersInfo] with(nolock)
SUBSTRING()方法;语法:SUBSTRING(character,start,length) ;介绍:参数1:要截取的字符串,参数2:开始截取的下标,参数3:截取的字符长度
CHARINDEX()方法;基本语法如下:CHARINDEX ( expressionToFind , expressionToSearch [ , start_location ] );参数1 目标字符串,就是想要找到的字符串,最大长度为8000 , 参数2 用于被查找的字符串,参数3 开始查找的位置,为空时默认从第一位开始查找。
REVERSE() 将字符串倒叙。主要是用来实现字符串倒置的一个功能,可以把字符串里各个字符的顺序倒过来。
 
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号