Reputation: 15197
I am writing a stored proc to Select information, i would like it to only select between dates?
This is what it looks like now:
ALTER PROCEDURE [dbo].[AutoCompleate]
@DateFrom datetime,
@DateTo datetime,
@SearchField varchar(50)
AS
-- V1.0 : ShaunM : 15 jun 2012
-- AutoComplete textbox
exec ('
SELECT DISTINCT ' +
@SearchField + ' FROM SchemaAudit
ORDER BY ' + @SearchField +' ASC')
I want the select to run for entry's into the database between @DateTo and DateFrom, Does any one know how to do this?
Upvotes: 3
Views: 15686
Reputation: 19346
Instead of exec you should be using sp_executesql which allows for use of parameters, avoiding a risk of Sql injection and avoiding potential issues with dates passed as strings. First parameter is a query, second is a list of parameters and their types and the rest are parameter values.
alter PROCEDURE [dbo].[AutoCompleate]
@DateFrom datetime,
@DateTo datetime,
@SearchField varchar(50)
AS
-- V1.0 : ShaunM : 15 jun 2012
-- AutoComplete textbox
declare @sql nvarchar(max)
set @sql = 'SELECT DISTINCT '
+ quotename(@SearchField)
+ ' FROM SchemaAudit'
+ ' WHERE [Date] between @from AND @to ORDER BY '
+ quotename(@SearchField)
+ ' ASC'
exec sp_executesql @sql,
N'@from datetime, @to datetime',
@from = @DateFrom, @to = @DateTo
Now, about start and end dates, what exactly you want to do?
Upvotes: 4
Reputation: 223187
Use BETWEN
Where StartDate BETWEEN @DateFrom and @DateTo
EDIT: As Nalaka526 pointed out, I missed the EndDate, You can't use BETWEEN with two fields, You need to cast it to varchar and use >= and <= to compare between the range. Curt solution is doing that.
WHERE StartDate >= ' + Convert(varchar(20),@DateFrom) + 'AND EndDate >= ' + Convert(varchar(20),@DateTo) + '
Upvotes: 2
Reputation: 51494
Ignoring the fact that this technique could leave you vulnerable to a SQL injection attack, you need to use Convert
to convert the date to a varchar
Convert(varchar(20), DateTime, 111)
Upvotes: -1
Reputation: 103338
You would need to CAST
the date parameters as varchar
:
exec ('
SELECT DISTINCT ' +
@SearchField + ' FROM SchemaAudit WHERE StartDate >= "' + CAST(@DateFrom as varchar(20)) + '" AND EndDate >= "' + CAST(@DateTo as varchar(20)) + '"
ORDER BY ' + @SearchField +' ASC')
Upvotes: 1