| Author |
Topic |
|
josephl
Starting Member
12 Posts |
Posted - 2008-03-18 : 20:50:32
|
| Hi,I do have a stored procedure with parameters inside. I just want to ignore those parameters that are NULL so that my WHERE clause will not execute them anymore. Here's my code:CREATE PROCEDURE SEARCHPATIENT @patnCode varchar(10) = NULL,@patnSurname varchar(20) = NULL,@patnGivenName1 varchar(20) = NULLASSELECT....FROM ...WHERE patnCode=@patncode ANDpatnSurname =@patnSurname ANDpatnGivenName1 =@patnGivenName1 BUT...If the user passes @patnSurname as NULL, I got an SQL error message: "There was an error executing the query.. Timeout expired... ". I was hoping I could write an WHERE clause where IT WILL ONLY EXECUTE those parameters WITH VALUE and IGNORE those NULLs.Can someone help me on this?Can I use IF THEN ELSE statement inside the WHERE clause?Can I use CASE STATEMENT inside the WHERE clause?Thanks in advance.Joseph |
|
|
tkizer
Almighty SQL Goddess
38200 Posts |
Posted - 2008-03-18 : 21:50:26
|
| Use COALESCE function.Tara KizerMicrosoft MVP for Windows Server System - SQL Serverhttp://weblogs.sqlteam.com/tarad/ |
 |
|
|
josephl
Starting Member
12 Posts |
Posted - 2008-03-18 : 22:08:42
|
| Hi,I already used it before - still getting either no records or SQL query error:Here is my exact SP code. Hope you could help me.thanks========================CREATE PROCEDURE SEARCHPATIENT @patnCode varchar(10) = NULL,@patnSurname varchar(20) = NULL,@patnGivenName1 varchar(20) = NULL,@patnDateOfBirth varchar(20) = NULL,@patnSexCode varchar(20) = NULLASDECLARE @tCat TABLE (rowID int identity(1,1),patnGuid varchar(100), patnCode varchar(50), patnSurname varchar(50),patnGivenName1 varchar(50), patnDateOfBirth varchar(50),patnSexCode varchar(20), patnAddressLine1 varchar(100), patnAddressLine2 varchar(100),patnSuburb varchar(100), patnCityTown varchar(100))INSERT @tCat (patnGuid,patnCode, patnSurname,patnGivenName1, patnDateOfBirth,patnSexCode, patnAddressLine1, patnAddressLine2,patnSuburb, patnCityTown)SELECT patnGuid,patnCode, patnSurname,patnGivenName1, patnDateOfBirth,patnSexCode, patnAddressLine1, patnAddressLine2,patnSuburb, patnCityTownFROM Disp_PatNativeWHERE ((patnSurname IS NULL OR patnSurname LIKE COALESCE(@patnSurname, '%')) AND (patnGivenName1 IS NULL OR patnGivenName1 LIKE COALESCE(@patnGivenName1, '%')) ) SELECT rowid, patnGuid,patnCode, patnSurname,patnGivenName1, CONVERT(VarChar, patnDateOfBirth, 103) AS DOB, CONVERT(Varchar, patnSexCode) AS SEX, patnAddressLine1 + ' ' + patnAddressLine2 + ' ' + patnSuburb + ' ' + patnCityTown AS ADDRESS FROM @tCat ORDER BY rowid, patnSurname,patnGivenName1GO======================= |
 |
|
|
josephl
Starting Member
12 Posts |
Posted - 2008-03-18 : 23:26:48
|
| Hi tkizer,I got it! I just manipulate the COALESCE function you've mentioned like this:WHERE...(patnSurname LIKE COALESCE(@patnSurname,patnSurname) + '%' ANDpatnGivenName1 LIKE COALESCE(@patnGivenName1, patnGivenName1) + '%' AND LEFT(patnSexCode,1) = COALESCE(LEFT(@patnSexCode,1) ,patnSexCode) ANDCONVERT(VarChar, patnDateOfBirth, 103) = COALESCE(@patnDateOfBirth,CONVERT(VarChar, patnDateOfBirth, 103))THANKS A LOT! |
 |
|
|
|
|
|