尝试设置一个SQL存储过程,如果传递给它的变量等于关键字'All'它会从WHERE子句中取消列'PlatformName'并返回PlatformName中的所有内容和@Title中的变量。
我的SQL代码如下。
WHERE PlatformName = CASE @Platform
WHEN 'All' THEN ''
ELSE @Platform
END
AND Title LIKE '%' + @Title + '%'
''没有返回任何东西。
Table PlatformName Title XBox 360 Foobar PS3 Foobar
答案 0 :(得分:4)
完全按照您要做的做法的一种方法是:
WHERE PlatformName = CASE @Platform
WHEN 'All' THEN PlatformName
ELSE @Platform
END
AND Title LIKE '%' + @Title + '%'
您将看到的另一种常见方式是:
WHERE (PlatformName = @Platform OR @Platform = 'All')
AND ...
我建议测试那些性能。
答案 1 :(得分:0)
做这样的事情:
WHERE ((PlatformName = @Platform) OR (@Platform = 'All'))
注意:如果您在查询中进行连接,则在将此添加到连接时可能会看到性能提升。例如
SELECT *
FROM Games G
JOIN Platform P ON G.pID = P.pID AND ((PlatformName = @Platform) OR (@Platform = 'All'))
这样可以减少对Platform表的扫描,查询速度也会更快。
答案 2 :(得分:-1)
语法是正确的,我在我的SQL Server数据库上尝试过,它使用了以下查询:
SELECT * FROM CNT
WHERE CP_NOM = CASE CP_COD WHEN 2824 THEN 'NOMBRE' END AND CP_COD > 10
可能错误带有变量值 @Platform 或 @Title 。
在任何情况下,您都可以使用“全部”替换空平台字段(PlatformName ='')的值,您可以更轻松地查询
WHERE PlatformName = @Platform AND Title LIKE '%' + @Title + '%'