Tsql 如何向我的SQL查询添加逻辑以包括/排除搜索参数?

Tsql 如何向我的SQL查询添加逻辑以包括/排除搜索参数?,tsql,sql-server-2008-r2,Tsql,Sql Server 2008 R2,使用SQL Server 2008R2,我有一个简单的查询: SELECT * FROM ItemData WHERE FREETEXT(Title, '"' + @OriginalSearchTerm + '"') AND ( WebsiteID=@WebsiteID AND GeoCity = @GeoCity AND GeoState = @GeoState ) ORDER BY ItemListID DESC 当@GeoCity和@GeoState有一个有效值时,这

使用SQL Server 2008R2,我有一个简单的查询:

SELECT *
FROM ItemData  
WHERE FREETEXT(Title, '"' + @OriginalSearchTerm + '"')   
AND  ( WebsiteID=@WebsiteID AND GeoCity = @GeoCity  AND GeoState = @GeoState )  
ORDER BY ItemListID DESC 
当@GeoCity和@GeoState有一个有效值时,这一切都很好。然而,在某些情况下,@GeoCity=-1和/或@GeoState=-1

我不希望为这些情况编写完整的单独查询,尽管这样可以很好地工作

如何优化当前查询以实现这一点


谢谢。

当@GeoCity=-1和/或@GeoState=-1时,我不确定您希望查询做什么。假设在这种情况下要排除GeoCity=@GeoCity和/或GeoState=@GeoState条件,查询如下:

SELECT *
FROM ItemData  
WHERE FREETEXT(Title, '"' + @OriginalSearchTerm + '"')   
AND  ( WebsiteID=@WebsiteID AND 
    (@GeoCity = -1 OR GeoCity = @GeoCity)  AND
    (@GeoState = -1 OR GeoState = @GeoState) )  
ORDER BY ItemListID DESC 

-当OR语句为每个OR语句执行块时,这可能会更有效

SELECT *
FROM ItemData  
WHERE FREETEXT(Title, '"' + @OriginalSearchTerm + '"')   
AND  ( WebsiteID=@WebsiteID AND 
    (GeoCity = ISNULL(@GeoCity,-1)) AND
    (GeoState = ISNULL(GeoState,-1))
ORDER BY ItemListID DESC 

请阅读圣经中关于这一点的内容: