Solved

searching the database sql server dynamically

Posted on 2012-03-21
6
139 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
ID: 37746801
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
ID: 37746802
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
ID: 37746850
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
Comprehensive Backup Solutions for Microsoft

Acronis protects the complete Microsoft technology stack: Windows Server, Windows PC, laptop and Surface data; Microsoft business applications; Microsoft Hyper-V; Azure VMs; Microsoft Windows Server 2016; Microsoft Exchange 2016 and SQL Server 2016.

 
LVL 20

Expert Comment

by:BuggyCoder
ID: 37746857
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
ID: 37746903
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
ID: 37860171
Thank you very much all it helped a lot.
regards
0

Featured Post

Best Practices: Disaster Recovery Testing

Besides backup, any IT division should have a disaster recovery plan. You will find a few tips below relating to the development of such a plan and to what issues one should pay special attention in the course of backup planning.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

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 SQL Server, when rows are selected from a table, does it retrieve data in the order in which it is inserted?  Many believe this is the case. Let us try to examine for ourselves with an example. To get started, use the following script, wh…
Sending a Secure fax is easy with eFax Corporate (http://www.enterprise.efax.com). First, just open a new email message. In the To field, type your recipient's fax number @efaxsend.com. You can even send a secure international fax — just include t…
Both in life and business – not all partnerships are created equal. As the demand for cloud services increases, so do the number of self-proclaimed cloud partners. Asking the right questions up front in the partnership, will enable both parties …

896 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

13 Experts available now in Live!

Get 1:1 Help Now