Tsql 如何向我的SQL查询添加逻辑以包括/排除搜索参数?
使用SQL Server 2008R2,我有一个简单的查询: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有一个有效值时,这
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
请阅读圣经中关于这一点的内容: