select   size   from sysfiles where name like '%[_]Log'我用上面这句查询当前数据库的日志文件大小,在sqlserver2008下查询正确但在sqlserver2000下却差不多结果,何解?看联机丛书也没什么特别的说明啊

解决方案 »

  1.   

    select   *   from sysfiles where name like N'%[_]log'经核实:
    --2000下运行,找不到对应的值
    --2005/2008下可以顺利得到数据联机丛书上面没有改进。可能是2000里面的BUG。到2005,2008里面改善了!
      

  2.   

    有区别 
    --sql2000
    like ‘%xxx’ 无法使用索引
    --sql2005
    like ‘%xxx’ 根据选择度的大小 可能会用到索引
      

  3.   

    select   *   from sysfiles where NAME like '%Log%'  这样可以
      

  4.   


    我都是这样 很好很强大。。
    select   *   from sysfiles where NAME like '%Log%'  
      

  5.   

    select   size   from sysfiles where CHARINDEX('_LOG',name)>0这样也可以
      

  6.   

    select   *   from sysfiles where NAME like '%Log%'  
    上面的查询是所有包含Log文本的记录,可能有误的,比如数据库名字是LogABC,
    那么他有两个文件LogABC_Data, LogABC_Log
    查出来是两条记录而我只需要以_Log结尾的日志文件记录
      

  7.   

    select   SIZE  
    from sysfiles where
     CHARINDEX('_LOG',NAME)=LEN(NAME)-LEN('_LOG')+1试试这样吧,
      

  8.   

    终于找到原因了,原来NAME,FILENAME都是NCHAR(128)当然出错了,select    LEN(REVERSE(NAME)),
    LEN(LTRIM(RTRIM(REVERSE(NAME))))from sysfiles                         
    ----------- ----------- 
    128         15
    128         14(所影响的行数为 2 行)
      

  9.   

    就这个问题,这个写法应该可以。其实我想得到的是2000、2005、2008下一个通用的
    用like查询 以_XXX结尾的查询语句
      

  10.   

    select SIZE from sysfiles where RTRIM(NAME) like '%[_]Log%'  这样可以解决问题
      

  11.   

    select SIZE from sysfiles where LTRIM(RTRIM(NAME)) like '%[_]Log%'  
      

  12.   

    SQL77:
    原来就是这个原因,呵呵分别查了一下联机丛书里的sysfiles字段说明
    2000下 
    name nchar(128) 文件的逻辑名称。 2008下 是sysname 即 nvarchar(128)这种不定长的字符串名称,很明显不能设为char数据类型不知道微软当时是怎么想的