Lower()在Visual Studio 2010中SQL查询不起作用。备择方案?

时间:2011-09-01 20:08:28

标签: sql sql-server visual-studio-2010

这是合约。

我有2个数据库。一个是较旧的并且已经扩展了数据。另一个更新,相关数据较少。它们共享相同的产品,只有一个有更多的数据。

我已经开始了一个项目,我希望扩展较新的数据库,以包含较旧数据库中存在的一些缺失数据。问题是数据库之间的ID不匹配。所以我不得不按名字搜索。哪个可能是也可能不是同一个案例。 visual studio中的查询完全区分大小写。我对此进行了测试,我确信。

所以我的第一个想法就是用较低的功能进行搜索。像这样:

WHERE lower([Name1]) LIKE lower('%Name2%') 

但是当我去运行它时它给了我一个错误。 Visual Studio自动尝试将语句的语法更改为:

WHERE 'lower'([Name1]) LIKE 'lower'('%Name2%') 

我可以发誓lower()是正确的语法。我无法在google上找到任何替代方案,或者为什么visual studio不喜欢它。事实上,我刚刚在SQL Management Studio中尝试了类似的一行,但它确实有效。为什么它在Visual Studio中不起作用?

3 个答案:

答案 0 :(得分:1)

使用COLLATE指定区分大小写。如果需要,只需强制不区分大小写的排序规则。根据现有的数据整理,可能不需要它。例如:

SELECT ... FORM ...
WHERE Name1 COLLATE SQL_Latin1_General_CI LIKE '...';

答案 1 :(得分:1)

首先,VS不执行查询,您要查询的列上的排序规则将确定SQL是否将其视为区分大小写。另外,因为你在比较中使用LIKE,你真正想要的更像是:

WHERE lower([Name1]) LIKE '%' + lower([Name2]) '%'

答案 2 :(得分:0)

使用WHERE lower([Name1]) LIKE '%name2%'由于该值是常量(或输入?),因此您无需在此处将其转换为较低值。你可以事先做到这一点。 另外,不确定[ ... ]。也不需要它们。

但我认为最好的选择是告诉数据库你要比较不区分大小写的like so