• 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()  将字符串倒叙。主要是用来实现字符串倒置的一个功能,可以把字符串里各个字符的顺序倒过来。

  • 相关阅读:
    JavaScript之数学对象Math
    JavaScript之数据类型转换
    JavaScript之操作符
    JavaScript之基本语句
    JavaScript之基本概念(二)
    JavaScript之基本概念(一)
    使用velero进行kubernetes灾备
    minikube配置CRI-O作为runtime并指定flannel插件
    使用thanos管理Prometheus持久化数据
    linux开启tcp_timestamps和tcp_tw_recycle引发的问题研究
  • 原文地址:https://www.cnblogs.com/xuliuzai/p/9940957.html
Copyright © 2020-2023  润新知