日度归档:2019年8月20日

mssql sqlserver tempdb暴涨了,如何查询出暴涨所对应的sql脚本呢?


摘要:
sqlserver中tempdb暴涨了,常见的原因是查询未做优化,下文将讲述获取未优化的sql脚本的方法分享,如下所示:
实验环境:sql server 2008 R2


具体的查询步骤如下所示:

   
use tempdb  
go  

----检索出占用空间最大的sessioId 
SELECT top 50 t1.session_id,                                                      
t1.internal_objects_alloc_page_count,  t1.user_objects_alloc_page_count,  
t1.internal_objects_dealloc_page_count , t1.user_objects_dealloc_page_count,  
t3.login_name,t3.status,t3.total_elapsed_time  
from sys.dm_db_session_space_usage  t1   
inner join sys.dm_exec_sessions as t3   
on t1.session_id = t3.session_id   
where (t1.internal_objects_alloc_page_count>0   
or t1.user_objects_alloc_page_count >0  
or t1.internal_objects_dealloc_page_count>0   
or t1.user_objects_dealloc_page_count>0)  
order by t1.internal_objects_alloc_page_count desc  


---2.将第一个步骤中查询出的SessionId放入 替换下面的sessionId值,
---得到未优化的脚本信息,然后针对性优化处理

select s.text,p.*
from master.dbo.sysprocesses p   
cross apply sys.dm_exec_sql_text(p.sql_handle) s  
where spid = sessionId  ---第一步骤中的sessionId替换此处的sessionId值

mssql sqlserver关于sql语句中加 1=1 的条件的功能说明


摘要:
在sql脚本编写中,我们经常发现一些sql条件在检索时,都会在where条件后加入1=1的相关说明,
那么1=1的具体功能是什么呢? 下文将通过举例的方式,一一讲述1=1的功能

1=1 恒等式被加入条件时,表示检索永远为真,
1=1 检索条件主用于拼接字符串时, 可避免后面的条件都为空时,导致where查询条件操作异常.

例:

    declare @sql nvarchar(4000)
    set @sql ='
    select * from [数据表]
     where 1=1 '

    if [条件1] !=''
    begin
     set @sql = @sql +' and [列1] ='''+[条件1]+''' '
    end
    
    if [条件2] !=''
    begin
     set @sql = @sql +' and [列2] ='''+[条件2]+''' '
    end
 

mssql sqlserver date及datetime数据类型简介说明


摘要:
下文讲述sqlserver中表示日期的数据类型 date及datetime,如下所示:
实验环境:sql server 2008 R2



date数据类型简介

date数据类型是sqlserver2008中新加入的一种数据类型,此数据类型只包含日期部分,无时间部分
date数据类型可存储的时间范围为:
0001-1-1 ~ 9999-12-31
date 数据类型占用3个字节的存储空间

datetime数据类型简介

datetime 数据类型是sqlserver中表示一个 日期和时间部分
datetime 可表示的时间范围为:
1753-1-1 0:00:00 ~ 9999-12-31 23:59:59.997
datetime 数据类型,可精确到3.33毫秒
datetime 数据类型默认值为 1900-1-1 0:00:00
datetime 数据类型占用 8个字节