为什么我的存储过程没有结果?

时间:2016-07-21 14:14:36

标签: sql stored-procedures

我正在使用代码执行以下存储过程,但我没有得到任何结果,有人可以帮助并解释我哪里出错吗?

这是我的SP;

ALTER PROCEDURE [dbo].[sp_SearchFilms] 
-- Add the parameters for the stored procedure here
@type varchar(20),
@value varchar(50)
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;

-- Insert statements for procedure here
Select * from tblFilm where @type like CONCAT('%', @value,'%');
END

我传递了以下参数  @type ='标题'  @value ='Sam'

我希望这会返回Title列包含Sam名称的所有内容,而不返回任何内容。

2 个答案:

答案 0 :(得分:0)

它没有返回任何内容,因为它引发了错误。你没有检查它是否会引发错误。

尝试这样的事情

ALTER PROCEDURE [dbo].[sp_SearchFilms] 
@type varchar(20),
@value varchar(50)
AS
BEGIN

SET NOCOUNT ON;

SELECT *
FROM tblFile 
WHERE 
  title LIKE CASE WHEN @type = 'title' then CONCAT('%', @value,'%') ELSE title END
AND
  director LIKE CASE WHEN @type = 'director ' then CONCAT('%', @value,'%') ELSE director END
-- etc
END -- ALTER PROCEDURE

我个人更喜欢这个:

ALTER PROCEDURE [dbo].[sp_SearchFilms] 
@title varchar(50) = null,
@director varchar(50) = null
-- etc, parameter for each search term
AS
BEGIN

SELECT *
FROM tblFile 
WHERE 
  COALESCE(@title,title) like title 
  AND COALESCE(@director,director) like director
-- etc
END -- ALTER PROCEDURE

答案 1 :(得分:0)

我不明白为什么你想让这个查询复杂化。这是一个简单的查询:

SELECT * FROM tblFilm WHERE Title LIKE CONCAT('%', @value,'%');

这将搜索你。对于动态添加列名称没有任何额外的好处。

我了解您希望在查询中执行搜索。在这种情况下,您可以在查询中添加多个列,如下所示:

SELECT * FROM tblFilm WHERE Title LIKE CONCAT('%', @value,'%') AND genre LIKE CONCAT('%', @genre_value,'%')

我认为你会为此获得更好的查询执行计划。从长远来看,这更易于维护。我无法看到动态传递列名的好处,至少在这种情况下。

我建议你走正常路线。

希望这有帮助!!!