0

我正在编写一个查询,我正在根据 Equals、Not Equals 和 Starts With 等值检查列值。我想将这些值传递给动态查询。任何人都可以建议我。

SELECT * FROM EMP E WHERE E.SAL >= 30000

我应该能够在过程中动态传递 >=,=<,like 运算符。请建议我设计。

更新

这就是我要找的

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;

我想念当时的理解。我们只能有表达作为它的一部分。

谢谢大家。

4

2 回答 2

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;
于 2013-06-14T06:03:32.630 回答
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
于 2013-06-14T05:17:59.933 回答