似乎尽管SQL Server在WHERE子句中的情况不匹配,但它仍然在WHERE子句中尊重UPPER / LOWER,这看起来非常昂贵。是否可以指示SQL Server忽略WHERE子句中的UPPER / LOWER?
这似乎是一个毫无意义的问题,但能够为Oracle和SQL Server编写单个查询非常好。
谢谢,杰米
答案 0 :(得分:4)
对你的问题的简短回答是否定的 - 你不能让SQL服务器神奇地忽略WHERE
子句中的函数调用。
正如其他人所说,导致性能问题的原因是,在SQL Server上,使用WHERE
子句中的函数会阻止使用索引并强制进行表扫描。
为了获得最佳性能,您需要维护两个查询,每个查询对应一个RDBMS平台(在您的应用程序中或在数据库对象中,如存储过程或视图)。鉴于Oracle和SQL Server之间的许多其他功能区域不同,无论如何,您可能会最终执行此操作,如果不是这样的话,还可以使用其他功能。
答案 1 :(得分:0)
所以你的意思是:
WHERE YourColumn = @YourValue collate Latin1_General_BIN
但是如果你想让它在没有collate关键字的情况下工作,你可以将列的排序规则设置为不区分大小写的东西。
请记住,YourColumn上的索引将使用特定的排序规则,因此如果在WHERE子句中指定排序规则(而不是在列本身上),则索引的用处不大。我把它比作这样一个事实:几年前我在瑞典飞行时,我在地图上找不到韦斯特罗斯,因为我认为a
的字母实际上有重音,并且位于最后字母表。当我试图使用错误的排序规则时,地图背面的索引不太好。