quote: Originally posted by subhankar02dey I cant a range for salary and commision.Because this procedure is being called from a front end page where there is a dropdown which sends either > or < or = And there is textbox which sends the salary to the database procedure.I cant change the design
Umm....Then your options are:1. do something inefficient. egSET ANSI_NULLS, QUOTED_IDENTIFIER ONGOCREATE PROCEDURE dbo.emp_fill( @operator1 char(1) ,@operator2 char(1) ,@emp_salary int ,@emp_comm int)ASSET NOCOUNT ONSELECT * -- put in column list hereFROM dbo.employeesWHERE salary BETWEEN CASE WHEN @operator1 = '<' THEN 0 WHEN @operator1 = '=' THEN @emp_salary WHEN @operator1 = '>' THEN @emp_salary + 1 ELSE -1 END AND CASE WHEN @operator1 = '<' THEN @emp_salary - 1 WHEN @operator1 = '=' THEN @emp_salary WHEN @operator1 = '>' THEN 2147483647 ELSE -1 END AND commission_pct BETWEEN CASE WHEN @operator2 = '<' THEN 0 WHEN @operator2 = '=' THEN @emp_comm WHEN @operator2 = '>' THEN @emp_comm + 1 ELSE -1 END AND CASE WHEN @operator2 = '<' THEN @emp_comm - 1 WHEN @operator2 = '=' THEN @emp_comm WHEN @operator2 = '>' THEN 2147483647 ELSE -1 ENDGO 2. use dynamic SQL with the nasty security implications. egSET ANSI_NULLS, QUOTED_IDENTIFIER ONGOCREATE PROCEDURE dbo.emp_fill( @operator1 char(1) ,@operator2 char(1) ,@emp_salary int ,@emp_comm int)ASSET NOCOUNT ONDECLARE @SQL nvarchar(4000)SET @SQL = ''SELECT @SQL = @SQL + 'SELECT * FROM employees WHERE salary ' + @operator1 + ' @emp_salary AND commission_pct ' + @operator2 + ' @emp_comm'WHERE @operator1 IN ('<','=','>') AND @operator2 IN ('<','=','>')EXEC sp_executesql @SQL, N'@emp_salary int, @emp_comm int', @emp_salary, @emp_commGO 3. hardcode all the combinations. egSET ANSI_NULLS, QUOTED_IDENTIFIER ONGOCREATE PROCEDURE dbo.emp_fill1(@emp_salary int, @emp_comm int)AS SELECT * FROM employees WHERE salary < @emp_salary AND commission_pct < @emp_commGOCREATE PROCEDURE dbo.emp_fill2(@emp_salary int, @emp_comm int)AS SELECT * FROM employees WHERE salary < @emp_salary AND commission_pct = @emp_commGOCREATE PROCEDURE dbo.emp_fill3(@emp_salary int, @emp_comm int)AS SELECT * FROM employees WHERE salary < @emp_salary AND commission_pct > @emp_commGOCREATE PROCEDURE dbo.emp_fill4(@emp_salary int, @emp_comm int)AS SELECT * FROM employees WHERE salary = @emp_salary AND commission_pct < @emp_commGOCREATE PROCEDURE dbo.emp_fill5(@emp_salary int, @emp_comm int)AS SELECT * FROM employees WHERE salary = @emp_salary AND commission_pct = @emp_commGOCREATE PROCEDURE dbo.emp_fill6(@emp_salary int, @emp_comm int)AS SELECT * FROM employees WHERE salary = @emp_salary AND commission_pct > @emp_commGOCREATE PROCEDURE dbo.emp_fill7(@emp_salary int, @emp_comm int)AS SELECT * FROM employees WHERE salary > @emp_salary AND commission_pct < @emp_commGOCREATE PROCEDURE dbo.emp_fill8(@emp_salary int, @emp_comm int)AS SELECT * FROM employees WHERE salary > @emp_salary AND commission_pct = @emp_commGOCREATE PROCEDURE dbo.emp_fill9(@emp_salary int, @emp_comm int)AS SELECT * FROM employees WHERE salary > @emp_salary AND commission_pct > @emp_commGOCREATE PROCEDURE dbo.emp_fill( @operator1 char(1) ,@operator2 char(1) ,@emp_salary int ,@emp_comm int)ASSET NOCOUNT ONIF @operator1 = '<' AND @operator2 = '<' EXEC dbo.emp_fill1 @emp_salary, @emp_commELSE IF @operator1 = '<' AND @operator2 = '=' EXEC dbo.emp_fill2 @emp_salary, @emp_commELSE IF @operator1 = '<' AND @operator2 = '>' EXEC dbo.emp_fill3 @emp_salary, @emp_commELSE IF @operator1 = '=' AND @operator2 = '<' EXEC dbo.emp_fill4 @emp_salary, @emp_commELSE IF @operator1 = '=' AND @operator2 = '=' EXEC dbo.emp_fill5 @emp_salary, @emp_commELSE IF @operator1 = '=' AND @operator2 = '>' EXEC dbo.emp_fill6 @emp_salary, @emp_commELSE IF @operator1 = '>' AND @operator2 = '<' EXEC dbo.emp_fill7 @emp_salary, @emp_commELSE IF @operator1 = '>' AND @operator2 = '=' EXEC dbo.emp_fill8 @emp_salary, @emp_commELSE IF @operator1 = '>' AND @operator2 = '>' EXEC dbo.emp_fill9 @emp_salary, @emp_commGO Personally, I would ensure the web page was altered! |