获取sql执行时间

 

sql server中获取要执行的sql或sql块的执行时间,方法之一如下:

declare @begin datetime,@end datetime
set @begin =getdate()
--your sql
set @end=getdate()
PRINT DATEDIFF(millisecond, @begin, @end)/1000.0 --单位:s

 

测试执行getdate()方法要花多长时间:

declare @begin datetime,@end datetime
set @begin =getdate()
select getdate()
set @end=getdate()
PRINT DATEDIFF(millisecond, @begin, @end)/1000.0 --单位:s

 

执行结果截图如下:

在消息中,可见执行getdate()方法的时间是极短,可以忽略不计!

 

下面,以查询我本地的[user]表为例进行测试:

执行后的当前时间减去执行前的当前时间,即为sql或sql块的执行用时。

项目中,程序想拿到这个时间,只需把这个sql块封装成一个存储过程,存储过程有一个output参数,

把最后一行的print换成赋值给output输出参数即可。

存储过程如下:

CREATE PROCEDURE GetExecuteTimeProc
@executeTime decimal(18,3) output
 AS 
 begin
 declare @begin datetime,@end datetime
   set @begin =getdate()
   select * from [user]
   waitfor delay'00:00:5'--暂停5秒,模拟查询
   set @end=getdate()
   set @executeTime=cast((DATEDIFF(millisecond, @begin, @end)/1000.0) as decimal(18,3))
 end
GO

 

测试demo代码:

  static void Main(string[] args)
        {
            string sql = "GetExecuteTimeProc";
            SqlParameter[] parameters = 
                {
                  new SqlParameter("@executeTime",SqlDbType.Decimal){Direction=ParameterDirection.Output,Value=0}
                };
            DataTable dt = DBHelper.ExecuteSelect(sql, parameters,CommandType.StoredProcedure).Tables[0];
            decimal executeTime = Convert.ToDecimal(parameters[0].Value);
            int rowCount = 0;
            if (dt != null)
            {
                rowCount = dt.Rows.Count;
            }
            Console.WriteLine("一共有{0}行数据\n查询耗时{1}秒",rowCount,executeTime);
            Console.ReadKey();
        }

DBHelper类:

public class DBHelper
    {
        public static DataSet ExecuteSelect(string sql, SqlParameter[] param, CommandType commandType)
        {
            string ConnectionString = Properties.Resources.conStr.ToString();
            DataSet ds = new DataSet();
            using (SqlConnection conn = new SqlConnection(ConnectionString))
            {
                conn.Open();
                using (SqlCommand cmd =new SqlCommand(sql,conn))
                {
                    try
                    {
                        cmd.CommandType=commandType;
                        if (param != null)
                        {
                            foreach (var item in param)
                            {
                                cmd.Parameters.Add(item);
                            }
                        }
                        SqlDataAdapter sda=new SqlDataAdapter(cmd);
                        sda.Fill(ds);
                    }
                    catch (Exception ex)
                    {
                            throw;
                    }
                }
            }
            return ds;
        }
    }
View Code

 

运行截图:

posted @ 2015-06-21 13:52  秋刀鱼No1  阅读(3610)  评论(0编辑  收藏  举报