sql >> Databasteknik >  >> RDS >> Sqlserver

Hur skapar jag en lagrad procedur som valfritt söker efter kolumner?

Medan COALESCE tricket är snyggt, min föredragna metod är:

CREATE PROCEDURE ps_Customers_SELECT_NameCityCountry
    @Cus_Name varchar(30) = NULL
    ,@Cus_City varchar(30) = NULL
    ,@Cus_Country varchar(30) = NULL
    ,@Dept_ID int = NULL
    ,@Dept_ID_partial varchar(10) = NULL
AS
SELECT Cus_Name
       ,Cus_City
       ,Cus_Country
       ,Dept_ID
FROM Customers
WHERE (@Cus_Name IS NULL OR Cus_Name LIKE '%' + @Cus_Name + '%')
      AND (@Cus_City IS NULL OR Cus_City LIKE '%' + @Cus_City + '%')
      AND (@Cus_Country IS NULL OR Cus_Country LIKE '%' + @Cus_Country + '%')
      AND (@Dept_ID IS NULL OR Dept_ID = @DeptID)
      AND (@Dept_ID_partial IS NULL OR CONVERT(varchar, Dept_ID) LIKE '%' + @Dept_ID_partial + '%')

Den här typen av SP:er kan enkelt genereras kod (och återskapas för tabelländringar).

Du har några alternativ för att hantera siffror - beroende på om du vill ha exakt semantik eller söksemantik.



  1. Likheter och skillnader mellan funktionerna RANK, DENSE_RANK och ROW_NUMBER

  2. Ruby/PgSQL-fel på Rails start:kan inte ladda en sådan fil -- pg_ext (LoadError)

  3. Körs lagrade procedurer i databastransaktioner i Postgres?

  4. uppdatera och komprimera SQLite-databas i Android