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

原文: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:nil
xsi: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 增加系统信息
时间: 2024-08-17 16:17:00

DBA查询命令积累——不断更新的相关文章

Network Monitor 查询命令和MySQL命令

Microsoft Network Monitor 查询命令: Contains(property.Description,'10.2.81.140') 微软介绍地址: https://blogs.technet.microsoft.com/netmon/2006/10/17/intro-to-filtering-with-network-monitor-3-0/ MySQL查询命令: 1,) INDEX的定义 SHOW INDEXES from tablename 2.) 表的scheme.

站长应该知道的搜索引擎查询命令(二)

昨天为大家介绍了搜索引擎查询命令的两个常用命令组合,还没有看过的网友现在可以先看看<站长应该知道的搜索引擎查询命令>,相信看过的网友应该有所体会了,当然查询命令有很多,由于篇幅原因就没有介绍很多,只简单介绍了查询百度相关域的真实数据和文章被转载且保留版权的数量,今天继续给大家介绍其他高级命令组合的实际用途. 一.查询网站反链或相关域的组合命令 之前有一位朋友曾经问过我,怎么查询他的网站的外部链接,特别是想知道如何查询目标网站的反向链接,这里就给大家介绍下我是如何查询的. "INURL

Linux操作系统常用的网络状态查询命令

对于做系统运维的工程师来说,经常会在客户那面临这些问题:怎么网关不通?怎么端口被占用了?怎么IP配置不生效?所以掌握如何通过命令行设置IP.路由.排查网络故障的技巧就显得非常重要了,这篇文章给大家介绍下Linux系统中常用的网络状态查询命令:ifconfig | ping |  netstat | route | traceroute | nslook | lsof 1. ifconfig 该命令用来显示所有网络接口的详细情况的,例如:IP地址.网关.子网掩码.网口别名.MAC地址等. ethx

MySQL中使用or、in与union all在查询命令下的效率对比_Mysql

OR.in和union all 查询效率到底哪个快? 网上很多的声音都是说union all 快于 or.in,因为or.in会导致全表扫描,他们给出了很多的实例. 但真的union all真的快于or.in? EXPLAIN SELECT * from employees where employees.first_NAME ='Georgi' UNION ALL SELECT * from employees where employees.first_NAME ='Bezalel' 这条语

SQL跨数据库服务器查询和跨表更新的操作

SQL Server数据库跨数据库服务器查询和跨表更新的相关知识是本文我们主要要介绍的内容,接下来我们就通过一个实例来介绍这一过程.实例是这样的:想实现的功能很简单, 在我的本地一个表用来保存省的信息: T_Province,在另外一台服务器上也有一个保存省的表province,其中有我本地没有的provience_name_en和provience_id信息.我希望将它们保存到我的表中. 准备工作 首先我在本地 T_Province 表中添加了 ProvinceNameEn 和 Provinc

java-jdom解析修改xml然后再查询数据时没有更新

问题描述 jdom解析修改xml然后再查询数据时没有更新 jdom解析修改xml文件然后再查询数据时,还是原来的数据没有更新,这是什么情况.

常用SQL查询命令的语法

本文假定读者已经对数据库连接技术有所了解,因此只讨论有关SQL查询命令的语法.表结构如下(MS Access 2000): 表名:userTable ---------------------- 字段名 字段类型 ---------------------- userID 自动计数(长整型) userName 文本 userSex 文本 CreateDate 日期/时间(默认值为Now()) ---------------------- 一.用Select命令提取记录 1.取得表中所有记录 Se

mysql先查询后插入或者更新的事务并发问题?

问题描述 mysql先查询后插入或者更新的事务并发问题? 在对数据进行插入更新的时候遇到一个问题,做了一个事务: @Transaction public void insertOrUpdate(entity){ Object o = search(entity); if(o!=null) update(entity); else insert(entity); } 上面的伪代码在非并发态,是正常的.但是在并发的时候就会出现插入多条同样的数据,如果调高隔离级别进行控制,就会报: Deadlock

MySQL 随机查询数据与随机更新数据实现代码_Mysql

MySQL随机查询数据 以前在群里讨论过这个问题,比较的有意思.MySQLl的语法真好玩.他们原来都想用PHP的实现随机,但取出多条好像要进行两次以上查询.翻了手册,找到了下面这个语句,可以完成任务了. 复制代码 代码如下: SELECT * FROM table_name ORDER BY rand() LIMIT 5; MySQL的rand()函数在手册里是这么说的: RAND() RAND(N) 返回在范围0到1.0内的随机浮点值.如果一个整数参数N被指定,它被用作种子值. 关于MySQL