DBA查询命令积累——不断更新

本文涉及的产品
云数据库 RDS SQL Server,独享型 2核4GB
简介: 原文: DBA查询命令积累——不断更新 一、服务器配置: 1、兼容级别:兼容级别只影响指定数据库中的行为,而不会影响整个服务器上的行为。 1.1、查看数据库兼容级别及更改兼容级别: SELECT compatibility_level FROM sys.databases WHERE name=DB_NAME() 1.2、更改兼容级别:将某些数据库行为设置为与指定的 SQL Server 版本兼容。
原文: DBA查询命令积累——不断更新

一、服务器配置:

1、兼容级别:兼容级别只影响指定数据库中的行为,而不会影响整个服务器上的行为。

1.1、查看数据库兼容级别及更改兼容级别:

SELECT compatibility_level FROM sys.databases WHERE name=DB_NAME()


1.2、更改兼容级别:将某些数据库行为设置为与指定的 SQL Server 版本兼容。

sp_dbcmptlevel [ [ @dbname = ] name ] 
    [ , [ @new_cmptlevel = ] version ]

--上面的命令有可能在后续取消,所以建议使用下面语句:

ALTER DATABASE database_name 
SET COMPATIBILITY_LEVEL = { 80 | 90 | 100 }

权限
只有数据库所有者、sysadmin 固定服务器角色和 db_owner 固定数据库角色的成员(前提是您要更改当前数据库)才能执行此过程。

较低兼容级别和级别 100 之间的差异

兼容级别设置为 90 或更低 兼容级别设置为 100 影响的可能性

对于多语句表值函数,在创建它们时,无论会话级别设置如何,QUOTED_IDENTIFER 设置始终为 ON。

在创建多语句表值函数时,会遵循 QUOTED IDENTIFIER 会话设置。

在创建或更改分区函数时,会评估函数中的 datetimesmalldatetime 文字,并假定语言设置为 US_English。

使用当前语言设置来评估该分区函数中的 datetimesmalldatetime 文字。

INSERT 和 SELECT INTO 语句中允许使用(但会忽略)FOR BROWSE 子句。

INSERT 和 SELECT INTO 语句中不允许使用 FOR BROWSE 子句。

OUTPUT 子句中允许使用全文谓词。

OUTPUT 子句中不允许使用全文谓词。

不支持 CREATE FULLTEXT STOPLIST、ALTER FULLTEXT STOPLIST 和 DROP FULLTEXT STOPLIST。系统非索引字表自动与新的全文索引相关联。

支持 CREATE FULLTEXT STOPLIST、ALTER FULLTEXT STOPLIST 和 DROP FULLTEXT STOPLIST。

MERGE 不作为保留关键字强制应用。

MERGE 是完全保留的关键字。在 100 和 90 兼容级别下,都支持 MERGE 语句。

使用 INSERT 语句的 <dml_table_source> 参数会引发语法错误。

您可以捕获嵌套的 INSERT、UPDATE、DELETE 或 MERGE 语句中 OUTPUT 子句的结果,然后将这些结果插入目标表或视图。这通过使用 INSERT 语句的 <dml_table_source> 参数来实现。

除非指定 NOINDEX,否则 DBCC CHECKDB 或 DBCC CHECKTABLE 将对单个表或索引视图及其所有非聚集索引和 XML 索引同时执行物理和逻辑一致性检查。不支持空间索引。

除非指定 NOINDEX,否则 DBCC CHECKDB 或 DBCC CHECKTABLE 将对单个表及其所有非聚集索引同时执行物理和逻辑一致性检查。但是,在默认情况下,仅对 XML 索引、空间索引和索引视图执行物理一致性检查。

如果指定了 WITH EXTENDED_LOGICAL_CHECKS,则将对索引视图、XML 索引和空间索引(如果存在)执行逻辑检查。默认情况下,先执行物理一致性检查,然后执行逻辑一致性检查。如果还指定了 NOINDEX,则仅执行逻辑检查。

如果将 OUTPUT 子句和数据操作语言 (DML) 语句一起使用,并且在语句执行过程中发生运行时错误,则会终止并回滚整个事务。

如果将 OUTPUT 子句和数据操作语言 (DML) 语句一起使用,并且在语句执行过程中发生运行时错误,则行为取决于 SET XACT_ABORT 设置。如果 SET XACT_ABORT 设置为 OFF,则由使用 OUTPUT 子句的 DML 语句所生成的语句中止错误将终止该语句,但批处理的执行仍会继续,并且不会回滚事务。如果 SET XACT_ABORT 设置为 ON,则由使用 OUTPUT 子句的 DML 语句所生成的全部运行时错误都将终止批处理,并回滚事务。

CUBE 和 ROLLUP 不作为保留关键字强制应用。

CUBE 和 ROLLUP 是 GROUP BY 子句中的保留关键字。

对 XML anyType 类型的元素应用严格验证。

对 XML anyType 类型的元素应用宽松验证。有关详细信息,请参阅通配符组成部分和内容验证。

数据操作语言语句不能查询或修改特殊属性 xsi:nilxsi:type

这意味着 /e/@xsi:nil 失败,同时 /e/@* 忽略 xsi:nilxsi:type 属性。但是,/e 返回xsi:nilxsi:type 属性,以保持与 SELECT xmlCol 的一致性,即使xsi:nil = "false" 也是如此。

特殊属性 xsi:nilxsi:type 作为常规属性存储,不能查询和修改。

例如,执行查询 SELECT x.query('a/b/@*') 会返回包括 xsi: nilxsi: type 在内的所有属性。若要在查询中排除这些类型,请用@*[namespace-uri(.) != "insert xsi namespace uri" 替换@*,而不是用(local-name(.) = "type"local-name(.) ="nil" 来替换。

用于将 XML 常量字符串值转换为 SQL Server datetime 类型的用户定义函数被标记为确定的。

用于将 XML 常量字符串值转换为 SQL Server datetime 类型的用户定义函数被标记为不确定的。

不完全支持 XML 联合和列表类型。

完全支持联合和列表类型,包括以下功能:

  • 列表的联合

  • 联合的联合

  • 原子类型的列表

  • 联合的列表

当视图或内联表值函数中包含 xQuery 方法时,不对该方法所需的 SET 选项进行验证。

当视图或内联表值函数中包含 xQuery 方法时,对该方法所需的 SET 选项进行验证。如果该方法的 SET 选项设置不正确,将引发一个错误。

有关所需选项设置的详细信息,请参阅设置选项(XML 数据类型)。

包含行尾字符(回车符和换行符)的 XML 属性值不根据 XML 标准进行规范化。即返回回车符和换行符,而不是单个换行符。

包含行尾字符(回车符和换行符)的 XML 属性值会根据 XML 标准进行规范化。也就是说,外部已分析实体(包括文档实体)中的所有换行符都会在输入时进行规范化,方法是将两字符序列 #xD #xA 和后面没有跟 #xA 的所有 #xD 都转换为单个 #xA 字符。

使用属性来传输包含行尾字符的字符串值的应用程序接收到的这些字符将和提交时有所不同。若要避免规范化过程,请使用 XML 数字字符实体对所有行尾字符进行编码。

ROWGUIDCOL 和 IDENTITY 列属性可能错误地命名为约束。例如,CREATE TABLE T (C1 int CONSTRAINT MyConstraint IDENTITY) 语句可以执行,但约束名不会保留,也无法让用户访问。

ROWGUIDCOL 和 IDENTITY 列属性不能命名为约束。返回错误 156。

使用双向赋值(如 UPDATE T1 SET @v = column_name = <expression>)来更新列会产生意外后果,因为在语句执行过程中,可以在其他子句(如 WHERE 和 ON 子句)中使用变量的实时值,而不是使用语句起始值。这会导致谓词的含义无法预测地逐行变化。

只有在兼容级别设置为 90 时,此行为才适用。

使用双向赋值来更新列会产生预期的结果,因为在语句执行过程中,只会访问列的语句起始值。

在包含顶级 UNION 运算符的语句中,允许使用变量赋值,但会返回意外的结果。例如,在以下语句中,将来自两个表的联合的 EmployeeID 列的值赋给局部变量@v。按照定义,如果 SELECT 语句返回多个值,则将返回的最后一个值赋给变量。在这种情况下,会正确地将最后一个值赋给变量,但还会返回 SELECT UNION 语句的结果集。


复制代码
ALTER DATABASE AdventureWorks2008R2
SET compatibility_level = 90;
GO
USE AdventureWorks2008R2;
GO
DECLARE @v int;
SELECT @v = EmployeeID FROM HumanResources.Employee
UNION ALL
SELECT @v = EmployeeID FROM HumanResources.EmployeeAddress;
SELECT @v;

在包含顶级 UNION 运算符的语句中不允许变量赋值。返回错误 10734。

若要纠正该错误,请重写查询,如下例所示。


复制代码
DECLARE @v int;
SELECT @v = EmployeeID FROM 
    (SELECT EmployeeID FROM HumanResources.Employee
     UNION ALL
     SELECT EmployeeID FROM HumanResources.EmployeeAddress) AS Test
SELECT @v;

ODBC 函数 {fn CONVERT()} 使用语言的默认日期格式。对于有些语言,默认格式为 YDM,这会导致在将 CONVERT() 与要求使用 YMD 格式的其他函数(如 {fn CURDATE()})结合使用时出现转换错误。

在转换为 ODBC 数据类型 SQL_TIMESTAMP、SQL_DATE、SQL_TIME、SQLDATE、SQL_TYPE_TIME 和 SQL_TYPE_TIMESTAMP 时,ODBC 函数 {fn CONVERT()} 使用样式 121(一种独立于语言的 YMD 格式)。

ODBC 函数 {fn CURDATE()} 仅返回“YYYY-MM-DD”格式的日期。

ODBC 函数 {fn CURDATE()} 同时返回日期和时间,例如“YYYY-MM-DD hh:mm:ss”。

日期时间内部函数(如 DATEPART)不需要字符串输入值,即可成为有效的日期时间文字。例如,SELECT DATEPART (year, '2007/05-30') 可以成功编译。

日期时间内部函数(如 DATEPART)需要字符串输入值,才能成为有效的日期时间文字。在使用无效的日期时间文字时,会返回错误 241。



二、DBA应该记住的系统存储过程:

系统存储过程 用处
sp_help 查看对象的相关说明
sp_helpdb 查看数据库的相关属性
sp_who 列出目前连接属性
sp_dboption 设置数据库的属性
sp_tableoption 设置数据表的选项
sp_configure 配置SQLServer服务器
sp_executesql 执行SQL语句
sp_helptext 查看对象内容
sp_lock 查看数据库锁定情况
sp_who2 显示连接的被锁定情况
sp_depends 查看对象的依赖对象
sp_addmessage 增加系统信息



相关实践学习
使用SQL语句管理索引
本次实验主要介绍如何在RDS-SQLServer数据库中,使用SQL语句管理索引。
SQL Server on Linux入门教程
SQL Server数据库一直只提供Windows下的版本。2016年微软宣布推出可运行在Linux系统下的SQL Server数据库,该版本目前还是早期预览版本。本课程主要介绍SQLServer On Linux的基本知识。 相关的阿里云产品:云数据库RDS&nbsp;SQL Server版 RDS SQL Server不仅拥有高可用架构和任意时间点的数据恢复功能,强力支撑各种企业应用,同时也包含了微软的License费用,减少额外支出。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/sqlserver
目录
相关文章
|
5月前
|
关系型数据库 MySQL 数据库
啥?阿里DBA团队总监把MySQL 性能调优 金字塔,写进了800页笔记?
MySQL之所以能成为现在最流行的开源数据库,这跟它的开放性、包容性是分不开的。它的入门门槛低到用一条命令就能把MySQL安装起来,你能在程序开发的入门资料中很容易就找到MySQL的配套使用教程,你可以不用付任何费用就能在自己的环境中部署起来对外承载业务。
|
12月前
|
SQL 数据采集 运维
用SQL做一份数据分析报告,涉及哪些知识点?
在工作中,每个数据分析师都离不开做数据分析报告,而一份可落地的报告更是要求灵活地应用工具及理论知识。接下来,我们从工具应用的角度,看看如何用SQL做一份完整的数据分析报告。
153 0
|
SQL 数据库 索引
SQL基础【二十、索引】(超细致版本,前理论,后实践,应对sql面试绰绰有余)(五)
SQL基础【二十、索引】(超细致版本,前理论,后实践,应对sql面试绰绰有余)(五)
111 0
SQL基础【二十、索引】(超细致版本,前理论,后实践,应对sql面试绰绰有余)(五)
|
SQL 存储 数据库
SQL基础【二十、索引】(超细致版本,前理论,后实践,应对sql面试绰绰有余)(一)
SQL基础【二十、索引】(超细致版本,前理论,后实践,应对sql面试绰绰有余)(一)
110 0
SQL基础【二十、索引】(超细致版本,前理论,后实践,应对sql面试绰绰有余)(一)
|
SQL 存储 数据库
SQL基础【二十、索引】(超细致版本,前理论,后实践,应对sql面试绰绰有余)(二)
SQL基础【二十、索引】(超细致版本,前理论,后实践,应对sql面试绰绰有余)(二)
145 0
SQL基础【二十、索引】(超细致版本,前理论,后实践,应对sql面试绰绰有余)(二)
|
SQL 存储 数据库
SQL基础【二十、索引】(超细致版本,前理论,后实践,应对sql面试绰绰有余)(四)
SQL基础【二十、索引】(超细致版本,前理论,后实践,应对sql面试绰绰有余)(四)
121 0
SQL基础【二十、索引】(超细致版本,前理论,后实践,应对sql面试绰绰有余)(四)
|
SQL 索引
SQL基础【二十、索引】(超细致版本,前理论,后实践,应对sql面试绰绰有余)(三)
SQL基础【二十、索引】(超细致版本,前理论,后实践,应对sql面试绰绰有余)(三)
111 0
SQL基础【二十、索引】(超细致版本,前理论,后实践,应对sql面试绰绰有余)(三)
|
SQL 存储 Shell
SQL基础【二十、索引】(超细致版本,前理论,后实践,应对sql面试绰绰有余)(六)
SQL基础【二十、索引】(超细致版本,前理论,后实践,应对sql面试绰绰有余)(六)
142 0
|
SQL 运维 数据库
最受DBA欢迎的250篇学习文档
最受DBA欢迎的250篇学习文档