我正在编写一个查询,我根据Equals,Not Equals和Starts With等值检查列值。我想将这些值动态传递给查询。任何人都可以建议我。
SELECT * FROM EMP E WHERE E.SAL >= 30000
我应该能够在程序中动态传递> =,=&lt ;,请建议我设计。
更新
这就是我要找的东西
SELECT e.ename,e.empno,e.job,e.sal,d.deptno
FROM DEPT D,emp e
WHERE d.deptno = e.deptno
AND CASE
WHEN e.deptno = 10
AND e.sal >= 1000 and e.name like('%j')
-- THEN e.name like('%j')
THEN 1
ELSE 0
END = 1;
我想念了那个。我们只能将表达作为其中的一部分。
谢谢大家。
答案 0 :(得分:1)
不要忽视简单的方法:
CASE in_comparison_operator
WHEN '>=' THEN
SELECT * INTO ... FROM EMP E WHERE E.SAL >= 30000;
WHEN '<=' THEN
SELECT * INTO ... FROM EMP E WHERE E.SAL <= 30000;
WHEN 'LIKE' THEN
SELECT * INTO ... FROM EMP E WHERE E.ENAME like ('J%');
END;
答案 1 :(得分:0)
你必须根据if else条件编写一些动态存储过程。 以下是一个想法,其余的你可以在这里实现你的登录
create procedure DynamicQuery
@ColumnName varchar(20),
@Operator varchar(10),
@Value varchar(10)
as
declare @qry nvarchar(max)
set @qry = 'select * from Emp e where ' + @ColumnName + ' '
if(@Operator = 'like')
begin
set @qry = @qry + ' like (''' + @Value + ''')'
end
else
begin
set @qry = @qry + ' ' + @Operator + ' ' + @Value
end
print @qry
exec sp_executesql @qry