没有必要在动态SQL里写食物,如果要写写在外面如:begin tran exec(@s) commit trans 或者将动态SQL写成函数或者存储过程.如何理解这句话呢?还有:
如果是使用like进行查询的话,简单的使用index是不可以的,但是全文索引耗空间.
like 'a%' 使用索引 like '%a' 不使用索引引用 like '%a%' 查询时,查询时间和字段值总长度成正比,所以不能用char类型,而是varchar.怎么理解?是推荐用 like 'a%' 和 like '%a' 不推荐 like '%a%' 是么?谢谢~

解决方案 »

  1.   

    1、
    没有必要在动态SQL里写食物,如果要写写在外面如:begin tran exec(@s) commit trans 或者将动态SQL写成函数或者存储过程.如何理解这句话呢?
    -----------------------------
    你的这句exec(@s)是放到事务中去执行的
    或者写成存储过程...
    是不是搞错了,动态语句Exec(@s)不能在函数中执行的2、
    char类型:固定长度的非unicode
    varchar类型:可变长度的非unicode是推荐用 like 'a%' 和 like '%a' 不推荐 like '%a%' 是么?
    like 'a%' :查询以a字母开头的所有字符,如:a1   , axffgdfg  , aa8980 等
    like '%a' :查询以a字母结尾的所有字符,如:1234a   ,ffgdfga  ,8980a 等
    like '%a%' :只要包含a的都会被查出
      

  2.   

    还有:
    如果是使用like进行查询的话,简单的使用index是不可以的,但是全文索引耗空间.
    like 'a%' 使用索引 like '%a' 不使用索引引用 like '%a%' 查询时,查询时间和字段值总长度成正比,所以不能用char类型,而是varchar.怎么理解?
    --------------------------------------------------------------------------------
    char 与varchar的区别就是varchar是可变长度的不会产生多余的字符,
    比如:
    char(5) 
    'a    '
    varchar(5)
    'a'
    在比较的时候
    char还会要比较后面的'    '的字符
    而varchar则不需要比较是推荐用 like 'a%' 和 like '%a' 不推荐 like '%a%' 是么?-------------------------------------------------------------------------------------
    是的