将 varchar 值转换为数据类型为 int 的列时发生语法错误
IF EXISTS (SELECT name
FROM sysobjects
WHERE name = N'xjtu_search'
AND type = 'P')
DROP PROCEDURE xjtu_search
GO
CREATE PROCEDURE xjtu_search
@field varchar(255),
@keyword varchar(255),
@categoryid int = 0
AS
DECLARE @STR varchar(1024)
IF (@categoryid=0)
SET @STR='SELECT ID,BookName,Writer,Publisher FROM BookStore WHERE '+@field+' LIKE ''%'+@keyword+'%'''
ELSE
SET @STR='SELECT ID,BookName,Writer,Publisher FROM BookStore WHERE CategoryID='+@categoryid+' AND '+@field+' LIKE ''%'+@keyword+'%'''
EXECUTE(@STR)
GO
不指定CategoryID值的时候可以运行,而且正常,就是说if的那部分没问题;
可是指定CategoryID的值,就出现“将 varchar 值 'SELECT ID,BookName,Writer,Publisher FROM BookStore WHERE CategoryID=' 转换为数据类型为 int 的列时发生语法错误。”错误
///////////////////////////////////
什么问题?