首页 > 数据库 >Sqlserver 中的一些SET参数、系统表的查询

Sqlserver 中的一些SET参数、系统表的查询

时间:2023-12-26 17:46:04浏览次数:40  
标签:SET NULL Sqlserver Server ANSI SQL 查询

SQL:BatchStarting: 是 SQL Server Profiler 中的一个事件,它指示一个新的 SQL 批处理正在开始执行。当 SQL Server 开始执行一个新的批处理时,它会生成此事件。批处理可以包含一个或多个 SQL 语句,它们将作为一个单独的单元执行。在 Profiler 或 Extended Events 中捕获这个事件可以帮助你跟踪和分析 SQL Server 中正在执行的查询或操作。
SQL:BatchCompleted: 是 SQL Server Profiler 中的一个事件。当 SQL Server 完成执行一个 SQL 批处理(Batch)时,会生成这个事件。这个事件的产生意味着整个 SQL 批处理已经执行完毕,并且可以包含一个或多个 SQL 语句。
在 SQL Server Profiler 中,可以使用这个事件来跟踪查询和批处理的执行情况。SQL:BatchCompleted 事件提供了关于查询执行时间、影响的行数、执行计划等信息,对于监视数据库的性能和查询执行情况非常有用。通过分析这个事件,你可以了解到 SQL 语句的执行效率、执行计划以及可能存在的性能瓶颈。


SET NO_BROWSETABLE ON :是 SQL Server 中的一个选项,它用于指示数据库引擎在执行查询时不要返回任何结果集。这个选项通常用于阻止返回结果,只执行对数据的更改或操作。
当你设置 NO_BROWSETABLE 为 ON 时,执行查询将不会返回结果集,即使查询本身会生成结果。这在某些情况下可能是有用的,特别是当你只对修改数据感兴趣,而不是获取结果集时。要记住的是,启用此选项后,你将无法看到由查询生成的结果,因此需谨慎使用,以免导致不必要的数据丢失或错误。

SET FMTONLY ON: 是针对 SQL Server 的一个 T-SQL 语句,用于在执行 Transact-SQL 批处理时,只返回查询的元数据(Metadata)信息,而不返回实际的数据记录。这个语句在某些情况下很有用,特别是在需要检查查询语句生成的结果集的结构,但并不需要实际返回数据的情况下。
当执行 SET FMTONLY ON 后,SQL Server 会模拟执行查询语句,分析其数据的结构,但不会执行实际的查询操作。这样可以快速获取查询的元数据,例如列名、数据类型等信息,而不必等待整个查询执行完毕返回数据。
这个语句的典型使用场景是在开发和调试过程中,当你需要检查一个查询返回的列的数据类型或者结构是否符合预期时。但需要谨慎使用,因为它仅返回空的结果集,并且有时可能会导致误解或错误的结果,特别是当查询依赖于实际的数据来进行一些操作时。

NOLOCK: 是 SQL Server 中用于指定不使用共享锁(Shared Lock)的查询提示。它允许查询在读取数据时不加锁,以提高并发性能。在 SQL 查询中使用 NOLOCK 提示时,查询将不会等待其他事务释放其持有的锁,这可能会导致读取未提交的数据(脏读)或者读取到尚未提交的修改。
使用 NOLOCK 查询提示时需要注意以下几点:
读取未提交的数据:由于不使用锁机制,可能会读取到尚未提交的数据。这意味着查询结果可能包含其他事务尚未提交的修改,可能导致不一致的结果。
可能导致幻读和不可重复读:尽管 NOLOCK 可以提高并发性能,但在并发情况下,可能会导致幻读(Phantom Reads)或不可重复读(Non-repeatable Reads)等问题,因为数据在查询期间可能被其他事务修改。
应用场景:通常在对一致性要求不高,或者对数据最新性要求不严格的场景下才会使用 NOLOCK,比如一些报表查询或数据仅用于参考而不用于重要业务逻辑的情况。

Audit Login: 在 SQL Server 中,你可以使用 SQL Server Audit 来审计登录事件。SQL Server Audit 是一种功能强大的工具,可以跟踪和记录数据库服务器上发生的各种事件,包括登录、查询、更改、删除等操作。

SET QUOTED_IDENTIFIER ON: 是 SQL Server 中的一个语句,用于设置在标识符(如表名、列名、存储过程名等)中使用双引号作为标识符定界符。在使用 QUOTED_IDENTIFIER ON 的情况下,双引号表示标识符,而单引号则用于字符串。
当 QUOTED_IDENTIFIER 设置为 ON 时,SQL Server 将遵循 ANSI SQL 标准,强制要求使用双引号将标识符括起来。

SET ARITHABORT OFF: 用于控制当运算发生错误时,是否引发错误并中止查询。通常情况下,ARITHABORT 默认是启用的(ON)。当它被设置为 OFF 时,一些情况下会改变 SQL Server 引擎的行为。
当 ARITHABORT 设置为 OFF 时,在某些情况下,即使计算出现错误(如除以零),SQL Server 也不会引发错误,而是返回 NULL 或者特定的错误代码。
当 ARITHABORT 设置为 ON 时,默认行为是在发生错误时引发错误并中止查询。这有助于保持数据的完整性,并且可以防止不可预知的行为。
一般来说,默认情况下,最好将 ARITHABORT 设置为 ON,这样可以确保查询的可靠性和一致性。只有在特殊情况下,需要处理不同的错误处理策略或者与其他数据库交互时,才会考虑手动设置 ARITHABORT

SET NUMERIC_ROUNDABORT OFF: 是 SQL Server 中的一个语句,用于控制在发生数据类型转换时是否引发错误。
当 NUMERIC_ROUNDABORT 设置为 OFF 时,如果数据类型转换导致了数据的精度损失(例如,将浮点数转换为整数时会导致小数部分丢失),SQL Server 不会引发错误,而是尝试执行转换并返回结果。这样的话,在一些情况下,即使有精度损失,也不会中止查询或抛出异常。
然而,默认情况下 NUMERIC_ROUNDABORT 是启用的(ON),这意味着当进行数值型数据转换时,如果转换导致了精度丢失,SQL Server 将引发错误并中止查询,以确保数据的完整性和一致性。
通常建议保持 NUMERIC_ROUNDABORT 设置为默认值 ON,这有助于保持数据的准确性和完整性。只有在特殊情况下,需要对精度损失的处理进行不同的设置时,才会考虑手动设置 NUMERIC_ROUNDABORT 为 OFF。

SET ANSI_WARNINGS ON: 用于控制在执行 SQL 查询时是否引发 ANSI 标准警告。
当 ANSI_WARNINGS 设置为 ON 时,SQL Server 将遵循 ANSI 标准,对于一些警告性质的情况(比如截断数据、除零等),会引发警告或者错误,以确保数据的完整性和一致性。
举例来说,在执行某些操作时,如果出现数据截断(将一个值赋给过小的列,导致数据丢失),SQL Server 会引发警告或者错误,中止相关的操作。
默认情况下,ANSI_WARNINGS 是启用的(ON),这有助于保持 SQL 查询的规范性和数据的完整性。只有在某些情况下,你确信了解并且需要忽略某些警告时,才会考虑手动将 ANSI_WARNINGS 设置为 OFF。不过,这种操作需要慎重考虑,因为可能会影响数据的准确性和完整性。

SET ANSI_PADDING ON: 用于控制对于在拼接和比较字符列时的填充方式。
当 ANSI_PADDING 设置为 ON 时,SQL Server 将遵循 ANSI 标准,在使用 CREATE TABLE 或 ALTER TABLE 语句创建或更改表时,使用 ANSI_PADDING 设置为 ON 的情况下,字符列的存储和比较会保留尾部的空格。也就是说,在插入数据时,如果字符串末尾有空格,将会被保留,而不会被截断。
默认情况下,ANSI_PADDING 是启用的(ON),这意味着 SQL Server 将按照 ANSI 标准处理字符列的填充方式。
只有在某些情况下,你确实需要关闭 ANSI 标准的字符列填充行为时,才会考虑手动将 ANSI_PADDING 设置为 OFF。不过,在大多数情况下,最好保持默认设置以确保与 ANSI 标准的兼容性和一致性。

SET ANSI_NULLS ON:用于控制在比较或处理 NULL 值时的行为。
当 ANSI_NULLS 设置为 ON 时,SQL Server 将按照 ANSI 标准处理 NULL 值。在此模式下:
使用等号(=)进行比较时,NULL 不能与任何值相等,包括其他的 NULL。
在聚合函数中,如 COUNT、SUM、AVG 等,将不会包括 NULL 值。
默认情况下,ANSI_NULLS 是启用的(ON),这意味着 SQL Server 将按照 ANSI 标准处理 NULL 值的比较。
只有在某些特殊情况下,你确实需要修改 NULL 值的比较行为时,才会考虑手动将 ANSI_NULLS 设置为 OFF。但是,要谨慎使用,因为修改 ANSI NULL 行为可能导致查询结果与预期不符。

SET CONCAT_NULL_YIELDS_NULL ON: 用于控制在连接字符串时,如果其中有 NULL 值是否返回 NULL。
当 CONCAT_NULL_YIELDS_NULL 设置为 ON 时,在字符串连接时,如果其中一个操作数是 NULL,整个连接表达式的结果将会是 NULL。
默认情况下,CONCAT_NULL_YIELDS_NULL 是启用的(ON)。这意味着如果你试图将一个字符串与 NULL 连接,结果将会是 NULL。

SET IMPLICIT_TRANSACTIONS OFF: 用于控制隐式事务的开启和关闭。
当 IMPLICIT_TRANSACTIONS 设置为 OFF 时,SQL Server 不会自动将每个语句包装在事务中。这意味着每个语句将在自己的事务上下文中执行,并且需要显式地使用 BEGIN TRANSACTION 开启事务,以及使用 COMMIT 或 ROLLBACK 明确地提交或回滚事务。
默认情况下,IMPLICIT_TRANSACTIONS 是禁用的(OFF)。这意味着不会自动开启隐式事务,每个语句都会在自己的事务上下文中执行。
开启隐式事务可能会导致一些意外的结果和行为,因此在大多数情况下,最好保持默认设置,显式地控制事务的开启和关闭,以确保更好地控制事务的边界和行为。

SET LANGUAGE: 是 SQL Server 中的一个语句,用于设置当前会话的语言环境。在 SQL Server 中,它可以影响日期格式、语言相关的错误消息、排序规则等。
SET LANGUAGE 'us_english' 用于将当前会话的语言设置为美国英语。这会影响到在该会话中所执行的一些语言相关的操作,比如日期格式的显示,一些语言相关的错误消息等。
这个语句会将当前会话的语言环境设置为指定的语言,从而影响到会话中执行的一些语言相关的操作和结果显示。

SET DATEFORMAT: 是 SQL Server 中用于设置日期格式的语句,用于指定解释日期字符串的格式。SET DATEFORMAT 'mdy' 会将当前会话的日期格式设置为月/日/年的格式。
在这种设置下,如果你输入一个日期字符串,SQL Server 将按照月/日/年的顺序解释该日期。例如,日期字符串 '01/02/2023' 将被解释为 2023 年 1 月 2 日。
这个设置只影响日期字符串的解释方式,并不影响数据的存储或内部表示。它仅决定了在输入日期时 SQL Server 应该如何解释这些日期。

SET DATEFIRST: 是 SQL Server 中用于设置每周的第一天的语句。默认情况下,SQL Server 将周的第一天设置为 Sunday(7),这与美国常见的习惯一致。
通过 SET DATEFIRST 7 可以显式地将每周的第一天设置为 Sunday(7)。这样,当你执行类似于 DATEPART(WEEKDAY, '2023-12-31') 这样的查询时,它将返回 1,因为 '2023-12-31' 是一周中的第一天,而在 DATEFIRST 设置为默认值 7(Sunday)时,它被认为是一周中的第一天。
这个设置可以影响与日期和周相关的计算,例如,确定一周的开始或者计算日期的周数等。


SET TRANSACTION ISOLATION LEVEL READ COMMITTED: 是 SQL Server 中用于设置事务隔离级别的语句。
READ COMMITTED 是 SQL Server 默认的事务隔离级别。这个级别的含义是:一个事务可以读取到其他已经提交的事务所做的更改,但不能读取到其他事务未提交的更改。它确保了每个事务都只能读取到已提交的数据,并且可以避免脏读(读取到未提交的数据)。
设置事务隔离级别可以在事务开始之前或者在事务内部进行。使用 SET TRANSACTION ISOLATION LEVEL 可以根据需要设置不同的隔离级别,比如 READ UNCOMMITTED、READ COMMITTED、REPEATABLE READ 或 SERIALIZABLE 等。
注意,更高的隔离级别通常会带来更高的数据完整性和一致性,但可能会降低并发性能。因此,在选择事务隔离级别时,需要考虑到系统的要求和性能之间的平衡。

COMMIT TRAN:用于提交事务的命令。当你执行一系列的数据库操作,并希望将这些操作永久地应用到数据库时,你可以使用 COMMIT TRAN 命令来提交事务。
在执行 COMMIT TRAN 后,SQL Server 将会把你在事务中所做的修改永久地保存到数据库中,并释放这个事务所持有的数据库锁。这样其他事务就可以访问这些修改了。
需要注意的是,COMMIT TRAN 只适用于处于已经启动的事务中,它表示你已经完成了这个事务的操作,并且希望将这些操作永久应用到数据库中。

@@TRANCOUNT: 是 SQL Server 中的一个系统函数,用于返回当前会话中活动的事务数量。它返回一个整数值,表示当前事务的嵌套级别。
当执行一个事务时,@@TRANCOUNT 的值会增加。每次执行 BEGIN TRANSACTION 语句,@@TRANCOUNT 的值会增加1。而每次执行 COMMIT TRANSACTION 或 ROLLBACK TRANSACTION,@@TRANCOUNT 的值会减少1。
这个函数对于检查当前会话中是否有未完成的事务或者确定事务的嵌套级别非常有用。当 @@TRANCOUNT 的值为 0 时,表示当前会话中没有活动的事务。

@@SPID 是一个系统函数,用于返回当前会话的进程 ID(SPID)。每个连接到 SQL Server 的会话都有一个唯一的 SPID,它用于标识每个连接的客户端进程。
通过执行 SELECT @@SPID; 可以获取当前会话的 SPID,它是一个数字值,代表当前连接的唯一标识符。这个标识符在处理连接、跟踪和诊断问题时非常有用,特别是在监视和追踪数据库活动时。

 

一些系统表的查询

 1 -- 存储过程查询
 2 EXEC sp_helptext 'Sxxxxer'
 3 SELECT definition FROM sys.sql_modules WHERE object_id = OBJECT_ID('MxxxxY')
 4 -- 表信息查询
 5 SELECT *FROM sys.columns WHERE object_id = OBJECT_ID('Tbl_Cxxxxg');
 6 -- 查询表创建语句
 7 SELECT definition FROM sys.sql_modules WHERE object_id = OBJECT_ID('Sys_User');
 8 -- 查询表备注信息
 9 SELECT obj.name AS TableName, ep.value AS TableComment FROM sys.objects AS obj
10 LEFT JOIN sys.extended_properties AS ep ON ep.major_id = obj.object_id
11 WHERE obj.type_desc = 'USER_TABLE' AND ep.class_desc = 'OBJECT_OR_COLUMN'
12       AND ep.minor_id = 0 AND obj.name = 'Tbl_xxxg';
13 -- 查询表字段与字段备注信息
14 SELECT 
15     cols.name AS ColumnName,
16     ep.value AS ColumnComment
17 FROM 
18     sys.tables AS tbl
19 INNER JOIN 
20     sys.columns AS cols ON tbl.object_id = cols.object_id
21 LEFT JOIN 
22     sys.extended_properties AS ep ON ep.major_id = cols.object_id 
23         AND ep.minor_id = cols.column_id 
24         AND ep.class = 1 -- Class 1 表示对象或列
25         -- AND ep.name = 'MS_Description' -- MS_Description 是存储列注释的属性名
26 WHERE 
27     tbl.name = 'ExxInfo'; -- 替换为你要查询的表名
28 -- 查询视图表字段与字段备注信息
29 SELECT 
30     cols.name AS ColumnName,
31     ep.value AS ColumnComment
32 FROM 
33     sys.views AS vw
34 INNER JOIN 
35     sys.columns AS cols ON vw.object_id = cols.object_id
36 LEFT JOIN 
37     sys.extended_properties AS ep ON ep.major_id = cols.object_id 
38         AND ep.minor_id = cols.column_id 
39         AND ep.class = 1 -- Class 1 表示对象或列
40         --AND ep.name = 'MS_Description' -- MS_Description 是存储列注释的属性名
41 WHERE 
42     vw.name = 'VIEW_ree'; -- 替换为你要查询的视图名

 

标签:SET,NULL,Sqlserver,Server,ANSI,SQL,查询
From: https://www.cnblogs.com/watermeloncode/p/17928906.html

相关文章

  • ORM 中没做外键关联,如何进行外联查询
    classBk_set(models.Model):bk_set_name=models.CharField(verbose_name="信息系统中文全称",max_length=50)bk_set_id=models.CharField(verbose_name="集群id",max_length=20,null=True,blank=True)...classDedicated_lines(models.Model):......
  • 安防LiteCVR监控视频云平台支持按时间查询告警列表消息
    随着人们对安全监控的需求不断提高,传统的监控设备已经无法满足人们的需求。因此,高清监控设备的出现成为了行业发展的必然趋势。高清监控设备不仅可以提供更清晰的画面,还可以提供更准确的监控信息。这也使得高清监控设备在安防监控领域的应用越来越广泛。LiteCVR视频平台基于云......
  • 周公解梦全解大全查询AI周公流量主小程序开源版开发
    周公解梦全解大全查询AI周公流量主小程序开源版开发AI周公流量主小程序是一个专注于解梦的应用程序,它集成了周公解梦全解大全查询功能,可以帮助用户理解和解释梦境中的符号和意义。以下是该小程序的主要功能介绍:解梦查询:用户可以输入梦境中的关键词或描述,并通过AI技术快速查询与之相......
  • 第三方状态查询
    fromUSSyunwei.binimport*defyeestatus(order_no):#order_no="W23042211480020"ledger_remark={"完结分账":"十分到家","服务商分账":"服务商","工程师分账":"工程师"}statu_list=[]foriinledger_remark:......
  • MySql的information_schema.processlist库学习之"如何检测出大数据sql查询"
    1.如何通过MySql检测出大数据sql查询一般数据库都会存在:information_schema数据库 检测出大数据sql查询[time时间越长说明,数据量越大,要根据公司的限度来衡量,我的思路是500以上都要查看是否是大数据的范畴]2.案例--检测出大数据sql查询[time时间越长说明,数据量越大,要根据......
  • 【MYSQL高级】Mysql找出执行慢的SQL【慢查询日志使用与分析】
    分析慢SQL的步骤1.慢查询的开启并捕获:开启慢查询日志,设置阈值,比如超过5秒钟的就是慢SQL,至少跑1天,看看生产的慢SQL情况,并将它抓取出来2.explain+慢SQL分析3.showProfile。(比explain还要详细,可以查询SQL在MySQL数据库中的执行细节和生命周期情况)4.运维经理ORDBA,进行MySQL数据库......
  • clearValidate()和resetFields()表单校验的用法和区别
    目标:实现表单重置和清除验证1.整个表单的校验移除<Formref="form"rule={this.rules}><FormItemprop="name"label="姓名"><Input/></FormItem><FormItemprop="age"label="年龄"><Input/></For......
  • MySQL查询慢,四种方案帮你解决!
    一般分页在系统中需要进行分页操作时,我们通常会使用LIMIT加上偏移量的方式实现,语法格式如下。SELECT...FROM...WHERE...ORDERBY...LIMIT...在有对应索引的情况下,这种方式一般效率还不错。但它存在一个让人头疼的问题,在偏移量非常大的时候,也就是翻页到很靠后的页面......
  • Power BI - 5分钟学习合并查询
    每天5分钟,今天介绍PowerBI合并查询。什么是合并查询?合并查询操作基于一列或多列的匹配值将两个现有表联接在一起。可以选择使用不同类型的联接,具体取决于所需的输出。举例:导入Sales表和Product表,请看样例内容。(Excel数据源导入请参考每天5分钟第一天)。操作步骤:1,点击【S......
  • 【开源项目推荐】Apache Superset——最优秀的开源数据可视化与数据探索平台
    大家好,我是独孤风。数据可视化是数据领域一个非常重要的应用。而结合了数据可视化和数据探索功能的BI(商业智能)工具,更是被各大公司青睐。但是,由于数据可视化工具的开发成本过高,长期以来一直是商业化的BI工具处于垄断地位。那么,有没有优秀的开源数据可视化与数据探索平台呢?今天......