我尝试以这种方式编写搜索查询
alter procedure search
@Book_ID int,
@Book_name varchar(50),
@Category_type_ID int,
@Number_of_copies int,
@Author_ID int
as
select * from Book_info
where [Book_name] like '[textboxofsearch]%'
有一个书籍信息记录,我通过名称搜索书籍,为此我首先为它创建程序...记录就像这样
bookid book_name Category_type_ID Number_of_copies Author_ID
----------------------------------------------------------------------
55 Software Engineering 2 150 39
56 mbr 5 150 44
57 Marketing Management 5 33 40
当我这样检查时:
search mbr
它向我显示了这个错误:
Msg 8114,Level 16,State 5,Procedure search,Line 0
将数据类型nvarchar转换为int时出错。
答案 0 :(得分:1)
只需通过不完整的过程语句,proc中的参数为:
@Book_ID int,
@Book_name varchar(50),
@Category_type_ID int,
@Number_of_copies int,
@Author_ID int
如果执行proc是:
search mbr
然后你有2个问题。一个是所有参数都是必需的,并且您只发送1个参数值mbr
。第二个是它看到第一个项mbr
无效。 mbr
是变量(如果需要,是@mbr
)还是文字字符串“mbr”(如果需要,则需要'mbr'
?在任何一种情况下,它都会向南移动,因为mbr不是INT和/或它之前的声明是错误的。为了更好地回答这个问题,你将不得不提供更多的信息。
答案 1 :(得分:0)
如果你按照书名传递了所有列,我不知道为什么你需要在你的存储过程中有所有其他参数但是如果你只有一个参数@Book_Name并且你的proc将返回所有关于所有的详细信息书名是LIKE @Book_Name的书,你可以这样做
alter procedure search
@Book_name varchar(50)
as
DECLARE @Sql NVARCHAR(MAX)
SET @Sql = 'select * from Book_info
where [Book_name] like '''+ @Book_name +'%'''
Execute sp_executesql @Sql
答案 2 :(得分:0)
问题在于调用方式,因为其他参数没有默认值。
在声明中你说:@Book_ID int
,作为第一个参数。但是你传递了第二个参数的文本。
换句话说,使用:
alter procedure search
@Book_ID int = null,
@Book_name varchar(50) = null,
@Category_type_ID int = null,
@Number_of_copies int = null,
@Author_ID int = null
as
尝试后:
search @Book_name = 'xxxxx'
或更改参数的顺序
alter procedure search
@Book_name varchar(50) = null,
@Book_ID int = null,
@Category_type_ID int = null,
@Number_of_copies int = null,
@Author_ID int = null
as
并尝试:
search 'xxxxx'