存储过程如下:
CREATE PROC sp_SearchInvite
@m_jobtitle char(50),
@m_schoolage char(50),
@m_dept char(50),
@m_description text,
@m_request text,
@ret char(2)

as
SELECT *
FROM INVITE
WHERE jobtitle like '%'+@m_jobtitle+'%' or schoolage like '%'+@m_schoolage+'%'
or dept like '%'+@m_dept+'%' or description like '%'+description+'%' or request like '%'+@m_request+'%'因为@m_description和@m_request是text类型的,所以出错了,我想问这种情况应该怎么解决呢?

解决方案 »

  1.   

    text类型应该用patindex()函数来完成类似like的功能.
      

  2.   

    不过, 对text 做like查询, 似乎有点夸张吧?
      

  3.   

    错误信息:服务器: 消息 403,级别 16,状态 1,过程 sp_SearchInvite,行 11
    对数据类型而言运算符无效。运算符为 add,类型为 text。
      

  4.   

    to zjcxc(邹建) :
      传参数值的时候, 就把%加去具体应该怎么做呢?
      

  5.   

    to hellowork(一两清风):
      text类型应该用patindex()函数来完成类似like的功能patindex()是sql自带的函数还是什么函数?
      

  6.   

    以下摘自SQLSERVER帮助:下面的函数和语句可以与 ntext、text 或 image 数据一起使用。函数  语句 
    DATALENGTH  READTEXT 
    PATINDEX  SET TEXTSIZE 
    SUBSTRING  UPDATETEXT 
    TEXTPTR  WRITETEXT 
    TEXTVALID   
    PATINDEX
    返回指定表达式中某模式第一次出现的起始位置;如果在全部有效的文本和字符数据类型中没有找到该模式,则返回零。语法
    PATINDEX ( '%pattern%' , expression ) 参数
    pattern
    一个字符串。可以使用通配符,但 pattern 之前和之后必须有 % 字符(搜索第一个和最后一个字符时除外)。pattern 是短字符数据类型类别的表达式。
    expression
    一个表达式,通常为要在其中搜索指定模式的列,expression 为字符串数据类型类别。返回类型
    int
      

  7.   

    放在语句当中应该怎么使用呢?
    PATINDEX ( '%@m_description%' , expression ) 换成这样吗?
      

  8.   

    要对text型做模糊查询是不是效率很低呢?
      

  9.   

    这样试试:
    ----定义存储过程
    CREATE PROC sp_SearchInvite
    @m_jobtitle varchar(50),
    @m_schoolage varchar(50),
    @m_dept varchar(50),
    @m_description varchar(8000),    /*将text类型换成varchar*/
    @m_request varchar(8000),    /*将text类型换成varchar*/
    @ret varchar(2)

    as
    SELECT *
    FROM INVITE
    WHERE 
    patindex(@m_jobtitle,jobtitle) > 0 or       /*这样来写patindex()的第一个参数*/
    patindex(@m_schoolage,schoolage) > 0 or 
    patindex(@m_dept,dept) > 0 or
    patindex(@m_description,description) > 0 or 
    patindex(@m_request,request) > 0GO----调用存储过程
    --声明参数变量
    declare @m_jobtitle varchar(50)
    declare @m_schoolage varchar(50)
    declare @m_dept varchar(50)
    declare @m_description varchar(8000)
    declare @m_request varchar(8000)
    declare @ret varchar(2)
    set @m_jobtitle = '%a%'        /*将通配符写进参数表达式中,而不是patindex('%'+@+'%',coloumn)*/
    set @m_schoolage = '%b%'
    set @m_dept = '%c%'
    set @m_description = '%d%'
    set @ret = '%e%'
    --执行
    EXEC sp_SearchInvite @m_jobtitle,@m_schoolage,@m_dept,@m_description,@m_request,@ret
      

  10.   

    我试过,char是可以的,但如果是text有没有办法呢?