日度归档:2019年7月21日

mssql sqlserver 当数据表中字段为空时,给出”默认值”的方法分享


摘要:
下文讲述sqlserver中,数据表中数值为空的处理方法,如下所示:
实验环境:sql server 2008 R2



实现思路:
在sqlserver中,实现此功能我们需采用isnull对空值进行处理和采用case对空值进行判断,如下所示:

 
     ---当数据表maomao365.com中列info中存在空值时,则输出汉字"空值"
      create table [maomao365.com](keyId int identity(1,1),
                         info nvarchar(30)  null
                        )
       go
       ---表数值初始化
       insert into [maomao365.com](info)values(N'sqlblog'),(null),(N'sql爱好者'),(N'猫猫小屋')
       go
   
       ---检索数据表maomao365.com,当遇到空值时,输出相应的中文汉字   
          
      select keyId ,
         case  
             when isnull(info,'') = '' then N'空值'
              else info 
         end  
           as info 
       from [maomao365.com]
       
        go
       truncate table [maomao365.com]
       drop       table [maomao365.com]
       go

mssql sqlserver 动态实现SELECT关键字运行的方法分享


摘要:
在sqlserver中,允许sql脚本”采用动态运行的方式”运行,下文讲述两种动态运行sql脚本的方法,如下所示:
实验环境:sql server 2008 R2



方式1: EXECUTE或exec关键字运行

通过以上两个关键字对动态字符串进行运行,此动态字符串的数据类型只能为varchar或nvarchar类型,最大长度为2G

   exec('select   * from [maomao365.com] where a=''blog'' ')
   EXECUTE('select   * from [maomao365.com] where a=''blog'' ')
 


方式2: sp_executesql 动态运行,可传入参数

sp_executesql 称之为可多次使用的动态sql模版,在动态运行时,可传入一些sql参数

       EXECUTE sp_executesql 
        N'SELECT * FROM [maomao365.com]   where [列]=@a',N'@a varchar(10)',@a = 'blog';

mssql sqlserver order by 排序字段运行速度慢的处理方法分享


摘要:
下文记载sql脚本中order by关键字导致运行速度慢的处理方法分享,如下所示:
实验环境:sql server 2008 R2


order by关键字是我们在编写sql脚本时,常用的关键字,今天有一个同事编写了一个order by的sql语句,运行速度非常的慢,下面我们将解决此问题的处理方法分享如下:
首先order by 运行慢有以下原因:

1.排序字段上没有设置合适的索引
2.排序字段后加入了asc或desc同索引上的排序方式不同,导致索引失效
3.排序字段中加入了函数导致索引无效
4.涉及多个排序字段,并且这多个字段不在同一张数据表中
5.排序字段是一个text字段,无法运用索引,所以导致效率低下,需调整排序字段类型

根据以上order by 可能导致慢的原因,我们可以进行一些针对性的优化:
1.让order by 涉及字段存在一个数据表中
2.order by字段上建立合适的索引(索引中注意索引键及索引所包含的列)
3.order by 字段上的排序方式同索引上的排序方式须一致
4.禁止对text字段做排序(如果一定要对text字段做排序,请使用varchar(max)或nvarchar(max)对字段进行存储)