如果在SQL存储过程中结束

时间:2017-03-31 10:03:01

标签: sql sql-server if-statement stored-procedures

我正在尝试创建一个高级搜索查询,其中同时过滤用户的姓名,状态和角色(可以选择一个或多个)。 下面给出了SQL存储过程的代码 我想要一种方法来获得IF和END IF,这样所有情况下的where条件都是互斥的 目前,如果第一个名称为null,则其余条件失败

scroll

1 个答案:

答案 0 :(得分:1)

如果是MSSQL db,如果我理解你的问题,我想你可以写:

(相互缄默):

SET @query = 'SELECT * FROM USER_MAIN WHERE '
IF (@user_name is not null ) SET @query = @query + '(user_first_name like '''+@user_name+''' OR user_first_name IS NULL)'
ELSE IF (@user_last_name is not null ) SET @query = @query + ' (user_last_name like '''+@user_last_name+''' OR user_last_name IS NULL)'
ELSE IF (@user_status is not null ) SET @query = @query + ' (user_status = '+@user_status+') '
ELSE IF (@role_id is not null) SET @query = @query + ' (user_role_id_ref = '+@role_id+')'

修改:相反,如果您想要所有内容:

SET @query = 'SELECT * FROM USER_MAIN WHERE 1=1 '
IF (@user_name is not null ) SET @query = @query + 'AND (user_first_name like '''+@user_name+''' OR user_first_name IS NULL)'
IF (@user_last_name is not null ) SET @query = @query + 'AND (user_last_name like '''+@user_last_name+''' OR user_last_name IS NULL)'
IF (@user_status is not null ) SET @query = @query + 'AND (user_status = '+@user_status+') '
IF (@role_id is not null) SET @query = @query + 'AND (user_role_id_ref = '+@role_id+')'