The Story
I want to search or filter records from the database based on some parameters like First Name, Company Name, Category etc.
However, using static or hard-coded SQL statement just won’t cut it. I need to write a dynamic SQL statement so I can use a flexible statement that is created and executed on-the-fly or on run-time.

Solution
First, I need to write a stored procedure that accepts different parameters.
Then, I am going to construct the dynamic SQL statement by concatenating strings.
Lastly, I am going to use the EXEC or sp_executesql to execute the created dynamic SQL statement.
Below is a sample implementation of dynamic SQL via stored procedure:
CREATE PROCEDURE [dbo].[PeopleSearch]
@FirstName nvarchar(250),
@LastName nvarchar(700),
@JobTitle varchar(300),
@EmailAddress varchar(300),
@CompanyName nvarchar(250),
@CompanyCity nvarchar(50),
@CompanyState nvarchar(50),
@CompanyZip nvarchar(50),
@Longitude decimal(11, 8),
@Latitude decimal(10, 8),
@Radius decimal(11, 8),
@Category smallint,
@ActiveEmpMin int,
@ActiveEmpMax int,
@CompanyEmailAddress varchar(3000),
@OperatorFlag bit = 0
AS
BEGIN
DECLARE @Where varchar(8000)
DECLARE @Operator varchar(6)
DECLARE @WildCard varchar(1)
IF @OperatorFlag = 0
BEGIN
SET @Operator = ' LIKE '
SET @WildCard = '%'
END
ELSE
BEGIN
SET @Operator = ' = '
SET @WildCard = ''
END
SET @Where = ''
IF LEN(ISNULL(@FirstName, '')) > 0
BEGIN
IF LEN(@Where) > 0
SET @Where = @Where + CHAR(13) + CHAR(9) + 'AND '
ELSE
SET @Where = @Where + CHAR(13) + 'WHERE '
SET @Where = @Where + 'p.FirstName' + @Operator + '''' + @WildCard + @FirstName + @WildCard + ''''
END
IF LEN(ISNULL(@LastName, '')) > 0
BEGIN
IF LEN(@Where) > 0
SET @Where = @Where + CHAR(13) + CHAR(9) + 'AND '
ELSE
SET @Where = @Where + CHAR(13) + 'WHERE '
SET @Where = @Where + 'p.LastName' + @Operator + '''' + @WildCard + @LastName + @WildCard + ''''
END
IF LEN(ISNULL(@JobTitle, '')) > 0
BEGIN
IF LEN(@Where) > 0
SET @Where = @Where + CHAR(13) + CHAR(9) + 'AND '
ELSE
SET @Where = @Where + CHAR(13) + 'WHERE '
SET @Where = @Where + 'p.JobTitle' + @Operator + '''' + @WildCard + @JobTitle + @WildCard + ''''
END
IF LEN(ISNULL(@EmailAddress, '')) > 0
BEGIN
IF LEN(@Where) > 0
SET @Where = @Where + CHAR(13) + CHAR(9) + 'AND '
ELSE
SET @Where = @Where + CHAR(13) + 'WHERE '
SET @Where = @Where + 'p.EmailAddress' + @Operator + '''' + @WildCard + @EmailAddress + @WildCard + ''''
END
IF LEN(ISNULL(@CompanyName, '')) > 0
BEGIN
IF LEN(@Where) > 0
SET @Where = @Where + CHAR(13) + CHAR(9) + 'AND '
ELSE
SET @Where = @Where + CHAR(13) + 'WHERE '
SET @Where = @Where + 's.SPONSOR_NAME' + @Operator + '''' + @WildCard + @CompanyName + @WildCard + ''''
END
IF LEN(ISNULL(@CompanyCity, '')) > 0
BEGIN
IF LEN(@Where) > 0
SET @Where = @Where + CHAR(13) + CHAR(9) + 'AND '
ELSE
SET @Where = @Where + CHAR(13) + 'WHERE '
SET @Where = @Where + 's.SPONSOR_CITY' + @Operator + '''' + @WildCard + @CompanyCity + @WildCard + ''''
END
IF LEN(ISNULL(@CompanyState, '')) > 0
BEGIN
IF LEN(@Where) > 0
SET @Where = @Where + CHAR(13) + CHAR(9) + 'AND '
ELSE
SET @Where = @Where + CHAR(13) + 'WHERE '
SET @Where = @Where + 's.SPONSOR_STATE' + @Operator + '''' + @WildCard + @CompanyState + @WildCard + ''''
END
IF LEN(ISNULL(@CompanyZip, '')) > 0
BEGIN
IF LEN(@Where) > 0
SET @Where = @Where + CHAR(13) + CHAR(9) + 'AND '
ELSE
SET @Where = @Where + CHAR(13) + 'WHERE '
SET @Where = @Where + 's.SPONSOR_ZIP' + @Operator + '''' + @WildCard + @CompanyZip + @WildCard + ''''
END
IF LEN(ISNULL(@Latitude, '')) > 0 AND LEN(ISNULL(@Longitude, '')) > 0 AND LEN(ISNULL(@Radius, '')) > 0
BEGIN
IF LEN(@Where) > 0
SET @Where = @Where + CHAR(13) + CHAR(9) + 'AND '
ELSE
SET @Where = @Where + CHAR(13) + 'WHERE '
SET @Where = @Where + '(s.SPONSOR_LATITUDE Is Not Null AND s.SPONSOR_LONGITUDE Is Not Null)'
SET @Where = @Where + CHAR(13) + CHAR(9) + 'AND '
SET @Where = @Where + 'dbo.GetDistance(' + CONVERT(varchar, @Latitude) + ', ' + CONVERT(varchar, @Longitude) + ', CAST(s.SPONSOR_LATITUDE as float(8)), CAST(s.SPONSOR_LONGITUDE as float(8))) <= ' + CONVERT(varchar, @Radius)
END
IF @Category IS NOT NULL
BEGIN
IF LEN(@Where) > 0
SET @Where = @Where + CHAR(13) + CHAR(9) + 'AND '
ELSE
SET @Where = @Where + CHAR(13) + 'WHERE '
SET @Where = @Where + 's.SPONSOR_BUSINESS_CODE' + ' = ' + @Category
END
IF @ActiveEmpMin IS NOT NULL
BEGIN
IF LEN(@Where) > 0
SET @Where = @Where + CHAR(13) + CHAR(9) + 'AND '
ELSE
SET @Where = @Where + CHAR(13) + 'WHERE '
SET @Where = @Where + 'd.Total_Active_Participants' + ' >= ' + CONVERT(varchar, @ActiveEmpMin)
END
IF @ActiveEmpMax IS NOT NULL
BEGIN
IF LEN(@Where) > 0
SET @Where = @Where + CHAR(13) + CHAR(9) + 'AND '
ELSE
SET @Where = @Where + CHAR(13) + 'WHERE '
SET @Where = @Where + 'd.Total_Active_Participants' + ' <= ' + CONVERT(varchar, @ActiveEmpMax)
END
IF LEN(ISNULL(@CompanyEmailAddress, '')) > 0
BEGIN
IF LEN(@Where) > 0
SET @Where = @Where + CHAR(13) + CHAR(9) + 'AND '
ELSE
SET @Where = @Where + CHAR(13) + 'WHERE '
SET @Where = @Where + 'c.EmailAddress' + @Operator + '''' + @WildCard + @CompanyEmailAddress + @WildCard + ''''
END
DECLARE @Query varchar (MAX)
SET @Query =
'SELECT p.FirstName, p.LastName, p.JobTitle, e.EmailAddress, e.Verified, p.PrimaryContact, p.IsAdmin, p.Url, p.BloombergKeyExecUrl, p.ProfileId
FROM PeopleData d
INNER JOIN Sponsors s
ON d.SPONSOR_ID = s.SPONSOR_ID
INNER JOIN Contacts.Companies c
ON s.SPONSOR_EXTID = c.ExtId
INNER JOIN Contacts.People p
ON c.ExtId = p.ExtId
INNER JOIN Contacts.EmailAddresses e
ON p.ProfileId = e.ProfileId' +
@Where
EXEC (@Query)
END