如何在SQL Server中为整个查询设置排序规则,以便进行不区分大小写的搜索?

尼古拉斯

我正在使用ColdFusion 9访问SQL Server 2008数据库。数据库设置为区分大小写。我想对此进行不区分大小写的搜索。就像是:

 select field
 from table
 where field2 = 'test'  COLLATE SQL_Latin1_General_CP1_CI_AS

复杂的是,我的where子句使用IN运算符来搜索以逗号分隔的字符串值列表。除非我在每个值之后设置排序规则,否则这似乎不起作用:

 select field
 from table
 where field2 IN ('test' COLLATE SQL_Latin1_General_CP1_CI_AS, 'test2' COLLATE SQL_Latin1_General_CP1_CI_AS, ...)

我可以通过搜索和替换来做到这一点,但我也想将此列表包括在cfQueryParam中,该参数本身处理定界符。我不确定这是否可行,如果可以的话,它会变得非常混乱。因此,我想为整个查询设置排序规则。在Oracle中,这可以通过更改会话设置在查询之前完成。在SQL Server中是否可能发生这种情况,例如:

 SET COLLATE SQL_Latin1_General_CP1_CI_AS
 select field
 from table
 where field2 IN (<cfqueryparam cfsqltype="cf_sql_varchar" value="test1,test2,...">)

如果将collat​​e语句放在IN子句之前,则此方法有效:

WHERE Column COLLATE SQL_Latin1_General_CP1_CI_AS IN 
      ( 
        <cfqueryparam value="TEST1,TEST2,TEST3" 
             cfsqltype="cf_sql_varchar"
             list="true">
      ) 

但是,我认为绑定变量可能会导致意外的副作用。当我之后直接重新运行完全相同的查询时-只是没有进行COLLATE-它仍然执行不区分大小写的搜索。

WHERE Column IN 
      ( 
        <cfqueryparam value="TEST1,TEST2,TEST3" 
             cfsqltype="cf_sql_varchar"
             list="true">
      ) 

但是以某种方式更改查询,因此不会缓存执行计划(例如,添加AND 1 = 1到where子句),并且结果再次区分大小写。只是要记住一点。

更新:

为了避免缓存问题,一种可能性是使用派生表。然后将collat​​e语句而不是IN子句应用于SELECT列表:

SELECT t.Column
FROM  (
        SELECT Column COLLATE SQL_Latin1_General_CP1_CI_AS AS Column
        FROM YourTable
      ) t 
WHERE t.Column IN 
      ( 
        <cfqueryparam value="TEST1,TEST2,TEST3" 
             cfsqltype="cf_sql_varchar"
             list="true">
      ) 

就是说,如果您始终要对此列执行不区分大小写的搜索,则最好按照cfqueryparam的建议更改列的排序规则。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在SQL Server中获得排序规则的区分大小写的版本?

如何在不区分大小写的Rails中进行查询搜索?

如何在Alfresco Solr搜索中查询不区分大小写的内容?

如何在弹性搜索中查询不区分大小写的字符串

如何在 Mongoose 中搜索不区分大小写的查询?

在区分大小写的SQL Server数据库中执行不区分大小写的类似查询

如何进行不区分大小写的搜索?

如何进行不区分大小写的搜索?

如何在不区分大小写的情况下不区分大小写进行排序

PostgreSQL:如何进行“不区分大小写”查询

如何进行不区分大小写的graphql查询?

SQL Server不区分大小写的查询

如何使搜索框在Rails中不区分大小写?

如何进行不区分大小写的字典排序并将其存储在OrderedDict中

如何在Clickhouse数据库上搜索不区分大小写的查询中的字符串?

如何在Elasticsearch中对关键字字段进行不区分大小写的搜索而无需重新索引?

如何在Vim中进行不区分大小写的搜索

如何在CQ中使用querybuilder rest api进行不区分大小写的搜索

如何在Golang中使用sort.Strings()进行不区分大小写的排序?

如何在WHERE子句中进行区分大小写的搜索(我正在使用SQL Server)?

如何在Sequelize中使用iLike运算符进行不区分大小写的查询

如何在mongodb中进行不区分大小写的查询

如何定义不区分大小写但值区分大小写的SQL Server列名

如何在vim中搜索不区分大小写的模式?

如何在Erlang / Elixir中执行不区分大小写的文件搜索

如何在Postgres 9.4 JSONB列中执行不区分大小写的搜索?

如何在ideavim中执行不区分大小写的搜索(使用/和?)

如何在XPath中执行不区分大小写的搜索?

如何在Python中对给定后缀的文件执行不区分大小写的搜索?