多条件判断SQL查询语句存储过程问题,紧急求教。

Tikyliu 2017-05-09 07:48:05
储存过程如下:
--创建存储过程

Create PROCEDURE test
@SubType varchar(50), @SearchWord varchar(50)
AS
BEGIN
select * from bookinfo where SubType=@SubType
这里会有一个判断,判断参数SearchWord值是否为空,当值不为空时,SearchWord=@SearchWord,此处应该如何书写才能与上句连接起来(这里是纯SQL语句,不能用EXEC进行执行)
END
GO

以上存储过程中如何将中间的那个参数判断与上一句SQL连贯起来,此处说明一下,不能使用 SET @SQL= 这样的方法,因为存储过程结尾部分不能使用 EXEC(@SQL) 去执行查询,这里的存储过程就是起到一个SQL语句的作用,以便后续在程序中通过代码可以直接调用这段SQL语句。

望各位大侠赐教!!
...全文
369 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
专注or全面 2017-05-30
  • 打赏
  • 举报
回复
AND ( @SearchWord IS NULL OR SearchWord = @SearchWord ); 是一种最差的办法,没有之一 http://www.cnblogs.com/wy123/p/5958047.html
道素 2017-05-13
  • 打赏
  • 举报
回复

Create PROCEDURE test
@SubType varchar(50), @SearchWord varchar(50)
AS
BEGIN
   set @SearchWord=nullif(@SearchWord,'')
select * from bookinfo where SubType=@SubType AND SearchWord=isnull(@SearchWord, SearchWord)

END
GO

Tikyliu 2017-05-10
  • 打赏
  • 举报
回复
非常感谢 sinat_28984567 !!我将SQL语句写成存储过程调取,发现效率并未提升太多,意义也不大了。
二月十六 2017-05-10
  • 打赏
  • 举报
回复
试试这样吧,最后的order不能实现,如果想实现动态排序只能拼接sql,exec执行。
SELECT  *
FROM    BookInfo
WHERE   IsShow = 'Y'
        AND ( ( ( @KFName = ''
                  OR @KFName IS NULL
                )
                AND KFName IN ( SELECT  KFName
                                FROM    KFTABLE
                                WHERE   UserList LIKE '%' + @Name + '%' )
              )
              OR KFName = @KFName
            )
        AND ( CASE WHEN @SubType = 'A' THEN Qty
                   ELSE 1
              END ) > 0
        AND ( CASE WHEN @SubType = 'B' THEN Qty
                   ELSE -1
              END ) < 0
        AND ( ( @SearchWord = ''
                OR @SearchWord IS NULL
              )
              OR ( [Desc] LIKE '%' + @SearchWord + '%'
                   OR PWNO LIKE '%' + @SearchWord + '%'
                 )
            )
Tikyliu 2017-05-10
  • 打赏
  • 举报
回复
楼上的大侠,帮个忙,昨天晚上关于那个多条件查询存储过程的问题,能否将以下代码 转换成 纯SQL语句形式,不使用 set @SQL 与 EXEC(@SQL) ,用 case when 来写,这段该如何写啊?万分感激大侠的帮助!! CREATE PROCEDURE SPCRKMX @KFName varchar(50), @SubType varchar(50), @SearchWord varchar(50),@OrderName varchar(50),@Name varchar(50) AS BEGIN Declare @SQL nvarchar(4000) set @SQL = 'select * from BookInfo where IsShow=''Y'' ' if (@KFName!='') set @SQL = @SQL + ' and KFName=@KFName' if (@KFName='') set @SQL = @SQL + ' and KFName in (select KFName from KFTABLE where UserList like ''%@Name%'' )' if (@SubType='A') set @SQL = @SQL + ' and Qty>0' if (@SubType='B') set @SQL = @SQL + ' and Qty<0' if (@SearchWord!='') set @SQL = @SQL + ' and (Desc like ''%@SearchWord%'' or PWNO like ''%@SearchWord%'')' set @SQL = @SQL + ' order by @OrderName desc' END GO
二月十六 2017-05-10
  • 打赏
  • 举报
回复
这样么?
SELECT  *
FROM    bookinfo
WHERE   SubType = @SubType
        AND ( CASE WHEN searchword = A THEN @searchword
                   WHEN searchword = B THEN @searchword22
                   ELSE @searchword22
              END ) = SearchWord
  • 打赏
  • 举报
回复

select * from bookinfo where (case when @SubType is not null then @SubType else null  end)=SubType
Tikyliu 2017-05-09
  • 打赏
  • 举报
回复
4楼这样写不行,我只是举个例子只有一个需要判断的变量,真实情况是有很多这样的条件变量需要判断啊
五维思考 2017-05-09
  • 打赏
  • 举报
回复
Create PROCEDURE test
@SubType varchar(50), @SearchWord varchar(50)
AS
BEGIN
IF (@SearchWord IS NULL)
	SELECT * from bookinfo where SubType=@SubType
ELSE
	SELECT * from bookinfo where SubType=@SubType AND SearchWord=@SearchWord
END
GO
Tikyliu 2017-05-09
  • 打赏
  • 举报
回复
用case when判断下就可以了,能给个示范写一段不?大侠。还有2楼的回答也非常感谢,假如searchword的值为A或者B时有不同的SQL语句该怎么写呢?譬如if searchword=A then SearchWord=@searchword if searchwod=B then Searchword=@searchword22 这样具体该怎么写啊
二月十六 2017-05-09
  • 打赏
  • 举报
回复
SELECT  *
FROM bookinfo
WHERE SubType = @SubType
AND ( @SearchWord IS NULL
OR SearchWord = @SearchWord
);
  • 打赏
  • 举报
回复
用 case when 判断下就可以

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧