存储过程如下:
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类型的,所以出错了,我想问这种情况应该怎么解决呢?
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类型的,所以出错了,我想问这种情况应该怎么解决呢?
对数据类型而言运算符无效。运算符为 add,类型为 text。
传参数值的时候, 就把%加去具体应该怎么做呢?
text类型应该用patindex()函数来完成类似like的功能patindex()是sql自带的函数还是什么函数?
DATALENGTH READTEXT
PATINDEX SET TEXTSIZE
SUBSTRING UPDATETEXT
TEXTPTR WRITETEXT
TEXTVALID
PATINDEX
返回指定表达式中某模式第一次出现的起始位置;如果在全部有效的文本和字符数据类型中没有找到该模式,则返回零。语法
PATINDEX ( '%pattern%' , expression ) 参数
pattern
一个字符串。可以使用通配符,但 pattern 之前和之后必须有 % 字符(搜索第一个和最后一个字符时除外)。pattern 是短字符数据类型类别的表达式。
expression
一个表达式,通常为要在其中搜索指定模式的列,expression 为字符串数据类型类别。返回类型
int
PATINDEX ( '%@m_description%' , expression ) 换成这样吗?
----定义存储过程
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