How do I create a stored procedure that will optionally search columns?

前端 未结 10 713
醉话见心
醉话见心 2020-12-08 08:30

I\'m working on an application for work that is going to query our employee database. The end users want the ability to search based on the standard name/department criteria

10条回答
  •  被撕碎了的回忆
    2020-12-08 09:15

    Copying this from my blog post:

    USE [AdventureWorks]
    GO
    
    CREATE PROCEDURE USP_GET_Contacts_DynSearch
    (
        -- Optional Filters for Dynamic Search
        @ContactID          INT = NULL, 
        @FirstName          NVARCHAR(50) = NULL, 
        @LastName           NVARCHAR(50) = NULL, 
        @EmailAddress       NVARCHAR(50) = NULL, 
        @EmailPromotion     INT = NULL, 
        @Phone              NVARCHAR(25) = NULL
    )
    AS
    BEGIN
        SET NOCOUNT ON
    
        DECLARE
            @lContactID         INT, 
            @lFirstName         NVARCHAR(50), 
            @lLastName          NVARCHAR(50), 
            @lEmailAddress      NVARCHAR(50), 
            @lEmailPromotion    INT, 
            @lPhone             NVARCHAR(25)
    
        SET @lContactID         = @ContactID
        SET @lFirstName         = LTRIM(RTRIM(@FirstName))
        SET @lLastName          = LTRIM(RTRIM(@LastName))
        SET @lEmailAddress      = LTRIM(RTRIM(@EmailAddress))
        SET @lEmailPromotion    = @EmailPromotion
        SET @lPhone             = LTRIM(RTRIM(@Phone))
    
        SELECT
            ContactID, 
            Title, 
            FirstName, 
            MiddleName, 
            LastName, 
            Suffix, 
            EmailAddress, 
            EmailPromotion, 
            Phone
        FROM [Person].[Contact]
        WHERE
            (@lContactID IS NULL OR ContactID = @lContactID)
        AND (@lFirstName IS NULL OR FirstName LIKE '%' + @lFirstName + '%')
        AND (@lLastName IS NULL OR LastName LIKE '%' + @lLastName + '%')
        AND (@lEmailAddress IS NULL OR EmailAddress LIKE '%' + @lEmailAddress + '%')
        AND (@lEmailPromotion IS NULL OR EmailPromotion = @lEmailPromotion)
        AND (@lPhone IS NULL OR Phone = @lPhone)
        ORDER BY ContactID
    
    END
    GO
    

提交回复
热议问题