Sql server Sql Server:编写一个逐步放松约束的查询

Sql server Sql Server:编写一个逐步放松约束的查询,sql-server,Sql Server,我们有一个存储过程,希望找到可能的最佳匹配,但如果找不到初始结果,我们希望放松一些约束,这样我们至少可以返回一些结果 目前,这是通过使用不同的where子句重复执行同一查询并在查询返回任何结果时停止来完成的。比如: select * from table where (field1 = @param1 and field2 = @param2 and field3 = @param3) if @ROWCOUNT = then select * from table where (fiel

我们有一个存储过程,希望找到可能的最佳匹配,但如果找不到初始结果,我们希望放松一些约束,这样我们至少可以返回一些结果

目前,这是通过使用不同的where子句重复执行同一查询并在查询返回任何结果时停止来完成的。比如:

select * from table where (field1 = @param1 and field2 = @param2 and field3 = @param3)
if @ROWCOUNT = then
    select * from table where (field1 = @param1 and field2 = @param2)
-- ... etc.
但是,我不喜欢这种方法,因为它意味着多次重复查询,所以我希望能够做同样的事情,并尽量减少重复

SELECT TOP 1 WITH TIES *
FROM   table 
WHERE  ( field1 = @param1 AND field2 = @param2 )
ORDER  BY CASE WHEN field1 = @param1  THEN 1 ELSE 0 END + 
          CASE WHEN field2 = @param2  THEN 1 ELSE 0 END + 
          CASE WHEN field3 = @param3  THEN 1 ELSE 0 END    
      DESC