这是合约。
我有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中不起作用?
答案 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: