在sql中搜索的存储过程

时间:2013-11-08 19:11:35

标签: sql sql-server

我尝试以这种方式编写搜索查询

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时出错。

3 个答案:

答案 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'