如果在其他条件语句中使用cluse,我该怎么办?

时间:2015-11-11 06:48:45

标签: sql-server stored-procedures

请检查我当前的存储过程。

USE [CastingDatabase]
GO
/****** Object:  StoredProcedure [dbo].[Searching_Talents]    Script Date: 11/11/2015 1:41:19 PM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER PROCEDURE [dbo].[Searching_Talents]

@name nvarchar(100),
@age_from nvarchar(10),
@age_to nvarchar(10)


AS
BEGIN

    SELECT *
    FROM [dbo].[Talents]
    WHERE(
    ((@name is null) or (@name='') or ([dbo].[Talents].[Name] LIKE '%'+@name+'%'))
    AND
    (((@age_to is null) or (@age_to='') or (DATEDIFF(YEAR,Talents.DOB,GETDATE()) IN
    (

            SELECT CAST (Item as int) FROM dbo.SplitString(@age_to,',')
    )
    ))
    )   

    )

    ORDER BY Name
END

我想在第二个where子句中添加一些if_else条件语句。

我该如何添加?

我想像这样添加

    AND(if(@age_from is null){---- my codes ----})

P.S。我是存储过程的新手。请帮帮我。

1 个答案:

答案 0 :(得分:1)

将CASE添加到要检查某个值的位置。这不仅适用于过程,它适用于sql server中的所有查询

...
AND (
    CASE 
        WHEN @age_from IS NULL
        THEN yourCode
    END
)

或者如果您只需要检查是否为空并写下其他内容,则可以这样检查:

...
AND (ISNULL(@age_from, defaultValue)

在这种情况下,如果age_from的值为null,则sql server将把defaultValue放在上面的代码中。