系统提供功能的三个疑惑

图片 10

正文目录列表:

1、SQL
Server系统提供的有个别嫌疑概述

2、系统函数调用时DEFAULT替代可选参数使用不统一
3、队列字段列message_enqueue_time记录的是UTC日期时间 

4、@@Pack_Received系统函数提醒新闻有荒唐

5、总结语 6、参考清单列表

 

正文:

1、SQL Server系统提供的部分猜忌概述

 

前不久专门的学业之余一贯在系统地学习和研究SQL Server
数据库引擎这一整块,开掘了一部分原先未有太放在心上的事物,认为SQL Server
光数据库引擎那块就有众多要学习和钻研的。小编个人以为SQL
Server提供的效应除了bug(能够因此service
pack打补丁修复)外,应该照旧很值得信赖的。以下开掘了之类SQL Server
系统提供成效的七个嫌疑:系统函数调用时DEFAULT取代可选参数使用不均等、队列字段列message_enqueue_time记录的是UTC时间和@@Pack_Received系统函数提示新闻有不当,以下针对每一个郁结具体演示和任课。


2、系统函数调用时DEFAULT替代可选参数使用不联合

 

DEFAULT关键字即能够在DDL语句中定义DEFAULT私下认可约束,也得以用来代替可选参数来选择。在DEFAULT替代可选参数使用那一点上,在效果与利益上和NULL具有一样的作用。

 

在SQL
Server系统提供的动态管理对象中,非常动态处理函数的调用时,将可选参数替代为NULL或DEFAULT效果同样的。如下T-SQL代码:

SELECT *
FROM [sys].[dm_db_index_physical_stats](NULL, NULL, NULL, NULL, NULL);
GO

SELECT *
FROM [sys].[dm_db_index_physical_stats](DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT);
GO

 

本着上述T-SQL的测量试验结果如下截图:

图片 1

 图片 2

 

别的品种的种类函数,有个别函数在可选参数代替NULL或DEFAULT效果也是同样的,有fn_trace_getinfo、fn_trace_gettable等。如以下T-SQL代码:

 

DECLARE @nvcDefaultTraceFilePath AS NVARCHAR(4000);
SET @nvcDefaultTraceFilePath = N'';

SELECT @nvcDefaultTraceFilePath = [path]
FROM [sys].[traces]
WHERE [id] = 1;

SELECT *
FROM ::fn_trace_gettable(@nvcDefaultTraceFilePath, NULL);

SELECT *
FROM ::fn_trace_gettable(@nvcDefaultTraceFilePath, DEFAULT);
GO

 

本着上述T-SQL的测量检验结果如下截图:

图片 3

 图片 4

在其余连串系统函数中,越来越多的时候在可选参数取代NULL或DEFAULT在成效上是不雷同的,有fn_virtualfilestats等。如下T-SQL代码:

SELECT *
FROM ::fn_virtualfilestats(1, NULL);

SELECT *
FROM ::fn_virtualfilestats(1, DEFAULT);

 

本着上述T-SQL测量试验的结果如下截图:

图片 5

图片 6

 

3、队列字段列message_enqueue_time记录的是UTC日期时间

 

上学和钻研service
broker时,开采了从服务队列中字段列message_enqueue_time值缺点和失误UTC日期时间。

 

在系统数据库tempdb中示范获取创制表的风云通报的功能。如下T-SQL代码:

USE [tempdb];
GO

-- 创建队列
IF OBJECT_ID(N'[dbo].[NotifyQueue]', 'SQ') IS NULL
BEGIN
    CREATE QUEUE [dbo].[NotifyQueue]
    WITH
        STATUS = ON
       ,RETENTION = OFF
END
GO

-- 创建服务
IF NOT EXISTS (SELECT 1 FROM [sys].[services] WHERE [name] = N'EventNotifyService') 
BEGIN
    CREATE SERVICE [EventNotifyService]
    ON QUEUE [dbo].[NotifyQueue] ([http://schemas.microsoft.com/SQL/Notifications/PostEventNotification]);
END
GO

-- 创建路由
IF NOT EXISTS (SELECT 1 FROM [sys].[routes] WHERE [name] = N'NotifyRoute')
BEGIN
    CREATE ROUTE [NotifyRoute]
    WITH 
        SERVICE_NAME = N'EventNotifyService'
       ,ADDRESS = N'LOCAL';
END
GO

-- 创建事件通知
IF NOT EXISTS (SELECT 1 FROM [sys].[event_notifications] WHERE [name] = N'CreateTableNotification')
BEGIN
    CREATE EVENT NOTIFICATION [CreateTableNotification]
    ON DATABASE
    FOR CREATE_TABLE
    TO SERVICE 'EventNotifyService', 'current database';
END
GO

 

创造表的 T-SQL脚本如下:

IF OBJECT_ID(N'[dbo].[TableCreate]', 'U') IS NULL
BEGIN
    CREATE TABLE [dbo].TableCreate
    (
        Col1 INT
        ,Col2 VARCHAR(100)
        ,Col3 XML
    )
    ON [PRIMARY]
END
GO

 

从刚刚开立的服务队列中获取列表的T-SQL代码如下:

SELECT 
    CAST([message_body] AS XML)
    ,message_enqueue_time
    ,*
FROM [dbo].NotifyQueue
GO

 

针对以上T-SQL测量检验的如下图:

图片 7

图片 8

 

上述截图中多个革命矩形框圈住的地点,鲜明日期时间差别的,这是因为队列中的字段列message_enqueue_time记录的是UTC日期时间,那样就大概对体现形成吸引的。

 

注意:

上述演示的T-SQL代码很一大半摘录于SQL Server 二〇一三管理高档教程(第2版)中第12章12.4.4事变通报小节中的程序清单 12-3
CreateQueue.sql。

 

4、@@Pack_Received系统函数提醒有荒唐

 

在所有人家梳理SQL
Server系统提供的系统函数时发掘了@@Pack_Received和@@Packet_Errors具备同等的提醒音讯。可以分明一定有一个是谬误的。提醒新闻的示范如截图:

图片 9

图片 10

图片 11

图片 12

 

5、总结语

 

近年全部概要地询问和学习了SQL Server
数据库引擎那块的学识,以为还是要三番五次浓重学习
和研究。在深切进度中窥见了以上SQL
Server系统提供功用的3个狐疑。针对系统函数调用时DEFAULT代替可选参数不统一的迷离尽量选取NULL,少用DEFAULT。针对服务队列中字段列message_enqueue_time为啥保存UTC日期时间最近照例不知道,探讨了无数sql
server系统数据库、示例数据库少之甚少使用UTC日期时间值的,也请知情的同人告知,优秀感激。

 

相当久非常久未有立异博文了,首要缘由照旧太懒,读、写和说都是少不了的基本能力的,写和说那多个基本本事继续晋级抓好。今早刚好元夜,也祝福各位元夜乐呵呵,阖家欢喜。新的一年从明天上马,继续踏上道路:撸起袖子加油干。


6、参谋清单列表

1、SQL Server 贰零壹叁管理高档教程(第2版)中第12章12.4.4风浪通报小节中的程序清单 12-3
CreateQueue.sql。

 

 

Leave a Comment.