我有Employee表,我在提供员工ID时选择员工记录,如果员工记录存在,我必须启用一个标志,否则为0.我试图使用以下脚本完成此操作:< / p>
DECLARE @FLAG INT
DECLARE @EMPID VARCHAR(10)
SELECT CASE WHEN COUNT(*) > 0 THEN 1 ELSE 0 END AS @FLAG,
E.EMPID,
E.EMPNAME,
E.DESIGNATION
FROM
EMPLOYEE E LEFT JOIN
GEO23.EMPLOYEEDETAILS ED ON E.EMPID = ED.EMPID
WHERE E.EMPID = @EMPID
ORDER BY E.EMPID DESC
但这会导致错误。有人可以帮忙吗请注意我是SQL的业余爱好者
答案 0 :(得分:1)
您可以设置一个标志,也可以在SQL Server中返回结果,但不能同时返回两者。因此,适用于您编写的查询的语法:
SELECT @FLAG = (CASE WHEN COUNT(*) > 0 THEN 1 ELSE 0 END)
FROM EMPLOYEE E LEFT JOIN
GEO23.EMPLOYEEDETAILS ED
ON E.EMPID = ED.EMPID
WHERE (E.EMPID = @EMPID)
ORDER BY E.EMPID DESC;
我在编写时留下了查询,但它有很多问题:
order by
是不必要的,因为它只返回一行。left join
是不必要的,因为它会保留第一个表中的所有行,而您只使用count()
。因此,等效版本是:
SELECT @FLAG = (CASE WHEN COUNT(*) > 0 THEN 1 ELSE 0 END)
FROM EMPLOYEE E
WHERE E.EMPID = @EMPID;
对于此查询,我建议使用employee(empid)
上的索引。
答案 1 :(得分:0)
假设EMPID是唯一的,您应该只需要做这样的事情。如果找到记录则为1,否则为0。
DECLARE @FLAG INT
DECLARE @EMPID VARCHAR(10)
SELECT @FLAG = COUNT(*)
FROM EMPLOYEE E
WHERE (E.EMPID = @EMPID)