Reputation: 1952
I am using SQL input parameters in a stored procedure to select different rows with various WHERE
clauses. This is being done using dropdown lists in a view. The issue is that I am allowing the user to select the operator in the where clause using a dropdownlist.
CREATE PROCEDURE SingleClauseReport
@selectedRows varchar(1000),
@testLeftInput varchar(100),
@testOperatorInput varchar(10),
@testRightInput varchar(100)
AS
BEGIN
Select @selectedRows
from Test
where @testLeftInput + ' ' + @testOperatorInput + ' ' + @testRightInput;
END
GO
I am getting an error stating that a condition is expected. Is it possible to do this? Otherwise I would just have to use one operator, like:
where @testLeftInput = @testRightInput;
Upvotes: 1
Views: 65
Reputation: 2097
Don't do this:
AS
BEGIN
declare @sql nvarchar(max)
set @sql = N'Select ' + @selectedRows
+ ' from Test where ' + @testLeftInput + ' '
+ @testOperatorInput + ' '
+ @testRightInput;
execute sp_executesql @sql
END
Upvotes: 0
Reputation: 415690
What you're trying won't work. You have two options: dynamic sql, or a re-writing the procedure to have one query for each possible operator and then decide which to execute based on the parameter. I strongly recommend the latter.
CREATE PROCEDURE SingleClauseReport
@selectedRows varchar(1000),
@testLeftInput varchar(100),
@testOperatorInput varchar(10),
@testRightInput varchar(100)
AS
BEGIN
If @testOperatorInput = '='
Begin
Select @selectedRows
from Test
where @testLeftInput = @testRightInput;
End
Else If @testOperatorInput = '>'
Begin
Select @selectedRows
from Test
where @testLeftInput > @testRightInput;
End
--...
END
Upvotes: 3