Solved

searching the database sql server dynamically

Posted on 2012-03-21
6
136 Views
Last Modified: 2012-04-18
Hi there,

i have an asp.net website with the 3 tier, and i have connect sql server database with it. now im implementing the search crateria, i have put 3 checkboxlist controls on the page. and also have two text boxes one for searching postcode and other for any business like Mcdonalds or pizza hut etc, and a search button.
my question is that when a user enter a post code or a business name or any of them can be empty as well, and also when the user select any of the checkbox in the checkbox list , as he can select either one or two or as many as he wants, so how i will make a stored procedure in sql server depending on the checkboxes selected in the checkboxlist. like if two checkboxes selected then the stored procedure should return me the result only for them two checkboxes, if more then return for them more its depends on the checkboxlist.

Any help appreciated as i am stuck now.

Thanks
0
Comment
Question by:shah36
6 Comments
 
LVL 16

Expert Comment

by:brad2575
Comment Utility
If you are doing this in a Stored Procedure you would pass all the variables to the Stored Procedure (if not do the following logic in the ASP code).

Then build out a string with your select statment, somethign like this (SQL CODE):

DIM SQLCode varchar(MAX)
-- doing 1=1 because easier when adding dynamic "AND" statements to force a single where no matter what
Set SQLCODE = "Select FieldList From Table WHERE 1=1"

if ISNULL(checkboxvariable, '') <> ''
    SET SQLCode = SQLCODE + 'AND fieldfromTable = ''' + checboxvariable + '''
   -- using 3 single quotes above for escape sequence so it forces 1 single quote to appear int he string


-- do the same for all the variable fields above

Then

EXEC(SQLCode)
0
 
LVL 20

Accepted Solution

by:
BuggyCoder earned 500 total points
Comment Utility
CREATE TABLE [dbo].[SalesHistory]
  (        
        @PostCode varchar(10),        
        @BusinessName varchar(10),
        @Val1 varchar(10),
        @Val2 varchar(10),
        @Val3 varchar(10),
  )
  GO              

  SET NOCOUNT ON             
  BEGIN
  DECLARE @SelectStatement NVARCHAR(2000)
  DECLARE @FullStatement NVARCHAR(4000)     
  SET @WhereStatement = '';

  SET @SelectStatement = 'SELECT * FROM SalesHistory '
  
  If(@PostCode<>null)
  BEGIN
  SET @WhereStatement = @WhereStatement + "PostCode='" + @PostCode + "' ";
  END

  If(@BusinessName<>null)
  BEGIN
  SET @WhereStatement = @WhereStatement + "AND BusinessName='" + @BusinessName + "'";
  END
  --And So On for other variables
  if(len(@WhereStatement)>0)
  BEGIN
  SET @WhereStatement = " Where " + @WhereStatement
  END

  SET @SelectStatement=@SelectStatement + @WhereStatement;
  print @SelectStatement;
  EXECUTE sp_executesql @SelectStatement;
  END

Open in new window


Basically where are generating dynamic query here:-
http://www.zdnetasia.com/generate-dynamic-sql-statements-in-sql-server-62040277.htm
0
 

Author Comment

by:shah36
Comment Utility
Hi thanx brad and buggycoder for the reply.

is it possible i implement it on sql server side , in a stored procedure of sql server.

as i have mentioned im working on a 3 tier so i need to keep seperate the database from the business logic..so i need to implement it in sql server and then use the parameters to access it.

any help ?
0
How your wiki can always stay up-to-date

Quip doubles as a “living” wiki and a project management tool that evolves with your organization. As you finish projects in Quip, the work remains, easily accessible to all team members, new and old.
- Increase transparency
- Onboard new hires faster
- Access from mobile/offline

 
LVL 20

Expert Comment

by:BuggyCoder
Comment Utility
CREATE Procedure usp_fetchdata
        @PostCode varchar(10),        
        @BusinessName varchar(10),
        @Val1 varchar(10),
        @Val2 varchar(10),
        @Val3 varchar(10),
AS

 
  BEGIN

  SET NOCOUNT ON;

  DECLARE @SelectStatement NVARCHAR(2000)
  DECLARE @FullStatement NVARCHAR(4000)     
  SET @WhereStatement = '';

  SET @SelectStatement = 'SELECT * FROM SalesHistory '
  
  If(@PostCode<>null)
  BEGIN
  SET @WhereStatement = @WhereStatement + "PostCode='" + @PostCode + "' ";
  END

  If(@BusinessName<>null)
  BEGIN
  SET @WhereStatement = @WhereStatement + "AND BusinessName='" + @BusinessName + "'";
  END
  --And So On for other variables
  if(len(@WhereStatement)>0)
  BEGIN
  SET @WhereStatement = " Where " + @WhereStatement
  END

  SET @SelectStatement=@SelectStatement + @WhereStatement;
  print @SelectStatement;
  EXECUTE sp_executesql @SelectStatement;
  END

Open in new window


The code is for SP, make some syntax changes(if required) as i don't have SSMS here...
0
 
LVL 9

Expert Comment

by:sachinpatil10d
Comment Utility
Try this

--sp_selData 'demo','valutec','mercury'
CREATE Proc sp_selData
        @Val1 nvarchar(50)='',
        @Val2 nvarchar(50)='',
        @Val3 nvarchar(50)=''
as
     select * from <TableName>
     where <Column1> like '%'+ @Val1 +'%'
     or <Column2> like '%'+ @Val2 +'%'
     or <Column3> like '%'+ @Val3 +'%'
Go

Open in new window


TableName = your table name
Column1,2,3 = your filter columns
0
 

Author Closing Comment

by:shah36
Comment Utility
Thank you very much all it helped a lot.
regards
0

Featured Post

Get up to 2TB FREE CLOUD per backup license!

An exclusive Black Friday offer just for Expert Exchange audience! Buy any of our top-rated backup solutions & get up to 2TB free cloud per system! Perform local & cloud backup in the same step, and restore instantly—anytime, anywhere. Grab this deal now before it disappears!

Join & Write a Comment

Suggested Solutions

So every once in a while at work I am asked to export data from one table and insert it into another on a different server.  I hate doing this.  There's so many different tables and data types.  Some column data needs quoted and some doesn't.  What …
In this article I will describe the Backup & Restore method as one possible migration process and I will add the extra tasks needed for an upgrade when and where is applied so it will cover all.
Internet Business Fax to Email Made Easy - With eFax Corporate (http://www.enterprise.efax.com), you'll receive a dedicated online fax number, which is used the same way as a typical analog fax number. You'll receive secure faxes in your email, fr…
Get a first impression of how PRTG looks and learn how it works.   This video is a short introduction to PRTG, as an initial overview or as a quick start for new PRTG users.

763 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

7 Experts available now in Live!

Get 1:1 Help Now