可以首先定义两个时间变量,@BeginTime 和@EndTime数据类型均为Time。
执行SQL语句之前,先把系统当前时间赋值给@BeginTime变量,在SQL语句结果时,再把当前系统时间赋值给@EndTime变量。
然后使用DATEDIFF函数计算时间差,即可得到SQL执行所需要时间。
参考下面演示例子:
代码
--删除计划缓存中的所有元素,通过指定计划句柄或 SQL 句柄从计划缓存中删除特定计划,或者删除与指定资源池相关联的所有缓存条目。
--http://msdn.microsoft.com/zh-cn/library/ms174283.aspx
DBCC FREEPROCCACHE
--从缓冲池中删除所有清除缓冲区
--http://msdn.microsoft.com/zh-cn/library/ms187762.aspx
DBCC DROPCLEANBUFFERS
GO
DECLARE @BeginTime TIME(4)
DECLARE @EndTime TIME(4)
--把当前系统日期时间赋值给@BeginTime变量
SET @BeginTime = CURRENT_TIMESTAMP;
BEGIN
--判断表是否在存在,如果存在,首先删除。
IF OBJECT_ID ('[dbo].[TestExecuteTime]','U') IS NOT NULL DROP TABLE [dbo].[TestExecuteTime];
--创建一个全新的表
CREATE TABLE [dbo].[TestExecuteTime]([Number] INT NOT NULL);
--下面是插入数据
DECLARE @I INT = 0
WHILE @I <= 10
BEGIN
INSERT INTO [dbo].[TestExecuteTime] ([Number]) VALUES (@I);
SET @I = @I + 1
END
END
--把当前系统日期时间赋值给@EndTime变量
SET @EndTime = CURRENT_TIMESTAMP;
--计算执行时间
SELECT DATEDIFF(millisecond, @BeginTime, @EndTime) AS [ExecuteTime]
--http://msdn.microsoft.com/zh-cn/library/ms174283.aspx
DBCC FREEPROCCACHE
--从缓冲池中删除所有清除缓冲区
--http://msdn.microsoft.com/zh-cn/library/ms187762.aspx
DBCC DROPCLEANBUFFERS
GO
DECLARE @BeginTime TIME(4)
DECLARE @EndTime TIME(4)
--把当前系统日期时间赋值给@BeginTime变量
SET @BeginTime = CURRENT_TIMESTAMP;
BEGIN
--判断表是否在存在,如果存在,首先删除。
IF OBJECT_ID ('[dbo].[TestExecuteTime]','U') IS NOT NULL DROP TABLE [dbo].[TestExecuteTime];
--创建一个全新的表
CREATE TABLE [dbo].[TestExecuteTime]([Number] INT NOT NULL);
--下面是插入数据
DECLARE @I INT = 0
WHILE @I <= 10
BEGIN
INSERT INTO [dbo].[TestExecuteTime] ([Number]) VALUES (@I);
SET @I = @I + 1
END
END
--把当前系统日期时间赋值给@EndTime变量
SET @EndTime = CURRENT_TIMESTAMP;
--计算执行时间
SELECT DATEDIFF(millisecond, @BeginTime, @EndTime) AS [ExecuteTime]