Please start any new threads on our new
site at https://forums.sqlteam.com. We've got lots of great SQL Server
experts to answer whatever question you can come up with.
Author |
Topic |
lesponce
Starting Member
8 Posts |
Posted - 2013-02-06 : 22:05:06
|
I'm trying to determine what's the best way to have multiple if/else statments in a stored procedure.I got a web page application that will allow the user to search customer info based on two joined tables. With that said, I was using inline code eg. string sql = "Select field1, field2, field3 from Table" and blah blah..I was told that the best practice is to use a stored procedure instead of having the sql string on the asp.net application.Ok, so working on the stored procedure.... is this a good practice? see below....Declare @query varchar(2000)Set @query ='Select field1, field2, field3, field4 from table1inner join table2on field = fieldwhere field = '''something'''' and '-- here's where I'd like to have some feedback... (values will be displayed on a gridview)-- SAMPLE 1if @First <> '' set @query = query + ' field = @First else if @Last <> '' set @query = @query + ' field2 = @Last else if @address <> '' set @query = @query + ' field3 = @address else if @address2 <> '' set @query = @query + ' field3 = @address2 // and so on...-- SAMPLE 2-- I don't think I need BEGIN/END right?if @First <> '' set @query = query + ' field = @First else BEGIN if @Last <> '' set @query = @query + ' field2 = @Last END else if @address <> '' BEGIN set @query = @query + ' field3 = @address END else BEGIN if @address2 <> '' set @query = @query + ' field3 = @address2 // and so on... END -- SAMPLE 3 Should I use CASE instead? if so, why? How? Any other way better than the ones above?Which way is better taking into consideration code, style, performance. |
|
James K
Master Smack Fu Yak Hacker
3873 Posts |
Posted - 2013-02-07 : 05:08:45
|
I would second your information that a stored procedure instead of adhoc SQL statements constructed from user input is better. Avoiding SQL injection attacks is one reason, there are others as well.A good example of how to do what you are attempting to do efficiently and in a manner that is not susceptible to SQL injection attacks is described in Gail Shaw's article at this link: http://sqlinthewild.co.za/index.php/2009/03/19/catch-all-queries/ |
|
|
lesponce
Starting Member
8 Posts |
Posted - 2013-02-07 : 07:14:50
|
Thanks James K for the feedback. |
|
|
|
|
|
|
|