所以我的查询如下,可能会返回很多结果:
SELECT P_CODE, NAME FROM TEST.dbo.PEOPLE
WHERE NAME LIKE '%JA%'
AND P_CODE LIKE '%003%'
AND DOB LIKE '%1958%'
AND HKID = ''
AND (MOBILE LIKE '%28%' OR TEL LIKE '%28%')
我想将它集成到存储过程(或视图?)中,以便只有在查询结果恰好为1行时才会返回结果。如果有0或> 1,那么它应该没有返回结果。
答案 0 :(得分:2)
如果您只想在1:
以外的情况下返回空结果集;WITH x AS
(
SELECT P_CODE, NAME, c = COUNT(*) OVER()
FROM TEST.dbo.PEOPLE
WHERE NAME LIKE '%JA%'
AND P_CODE LIKE '%003%'
AND DOB LIKE '%1958%'
AND HKID = ''
AND (MOBILE LIKE '%28%' OR TEL LIKE '%28%')
)
SELECT P_CODE, NAME FROM x WHERE c = 1;
否则,您必须运行两次查询(或将结果转储到中间存储,例如#temp表) - 一次获取计数,一次根据计数决定是否运行{ {1}}或不。{/ p>
答案 1 :(得分:1)
实际上,你需要类似于Linq-to-SQL实现的FirstOrDefault(),但是在服务器端完成,这意味着你需要在存储过程中执行查询,将结果转储到{{3}然后访问temp table variable以获取返回的行数,然后决定是否将结果转发给调用者。 如果这样做,请确保在临时表的查询中使用TOP 1,这样您只能根据需要获得单个结果。
<强>更新强>