SQL Server检查是否区分大小写?

如何检查SQL Server中的数据库是否区分大小写?我以前一直在运行查询:


SELECT CASE WHEN 'A' = 'a' THEN 'NOT CASE SENSITIVE' ELSE 'CASE SENSITIVE' END

但是我正在寻找其他方式,因为这实际上在过去给了我很多问题。


编辑-更多信息:现有产品具有许多预写的存储过程。在存储过程中,@test != @TEST取决于服务器本身的敏感性。因此,我正在寻找的是检查服务器灵敏度的最佳方法。


MYYA
浏览 727回答 3
3回答

隔江千里

可以在各种级别上设置排序规则:服务器数据库柱因此,您可以在不区分大小写的数据库中包含一个区分大小写的列。我还没有遇到过可以针对单个数据列的大小写敏感性进行业务案例研究的情况,但我想可能会这样。检查服务器排序规则SELECT SERVERPROPERTY('COLLATION')检查数据库整理SELECT DATABASEPROPERTYEX('AdventureWorks', 'Collation') SQLCollation;检查列排序规则select table_name, column_name, collation_namefrom INFORMATION_SCHEMA.COLUMNSwhere table_name = @table_name

慕仙森

如果使用默认排序规则选项安装了SQL Server,则可能会发现以下查询返回相同的结果:CREATE TABLE mytable&nbsp;(&nbsp;&nbsp; &nbsp; mycolumn VARCHAR(10)&nbsp;)&nbsp;GO&nbsp;SET NOCOUNT ON&nbsp;INSERT mytable VALUES('Case')&nbsp;GO&nbsp;SELECT mycolumn FROM mytable WHERE mycolumn='Case'&nbsp;SELECT mycolumn FROM mytable WHERE mycolumn='caSE'&nbsp;SELECT mycolumn FROM mytable WHERE mycolumn='case'&nbsp;您可以通过在列级别强制排序规则来更改查询:SELECT myColumn FROM myTable&nbsp;&nbsp;&nbsp; &nbsp; WHERE myColumn COLLATE Latin1_General_CS_AS = 'caSE'&nbsp;SELECT myColumn FROM myTable&nbsp;&nbsp;&nbsp; &nbsp; WHERE myColumn COLLATE Latin1_General_CS_AS = 'case'&nbsp;SELECT myColumn FROM myTable&nbsp;&nbsp;&nbsp; &nbsp; WHERE myColumn COLLATE Latin1_General_CS_AS = 'Case'&nbsp;-- if myColumn has an index, you will likely benefit by adding&nbsp;-- AND myColumn = 'case'&nbsp;SELECT DATABASEPROPERTYEX('<database name>', 'Collation')&nbsp;由于更改此设置会影响应用程序和SQL查询,因此我将首先隔离此测试。从SQL Server 2000,您可以轻松地运行ALTER TABLE语句来更改特定列的排序顺序,从而使其必须区分大小写。首先,执行以下查询以确定将其更改回的内容:EXEC sp_help 'mytable'&nbsp;在默认情况下,第二个记录集应包含以下信息:Column_Name排序规则mycolumn SQL_Latin1_General_CP1_CI_AS无论“归类”列返回什么,现在您都知道在进行以下更改后需要将其更改回什么,这将强制区分大小写:ALTER TABLE mytable&nbsp;&nbsp; &nbsp; ALTER COLUMN mycolumn VARCHAR(10)&nbsp;&nbsp; &nbsp; COLLATE Latin1_General_CS_AS&nbsp;GO&nbsp;SELECT mycolumn FROM mytable WHERE mycolumn='Case'&nbsp;SELECT mycolumn FROM mytable WHERE mycolumn='caSE'&nbsp;SELECT mycolumn FROM mytable WHERE mycolumn='case'&nbsp;如果这使事情变糟,则只需发出新的ALTER TABLE语句即可将其改回(确保将我的COLLATE标识符替换为之前找到的标识符):ALTER TABLE mytable&nbsp;&nbsp; &nbsp; ALTER COLUMN mycolumn VARCHAR(10)&nbsp;&nbsp; &nbsp; COLLATE SQL_Latin1_General_CP1_CI_AS&nbsp;如果您对SQL Server 7.0感到困惑,则可以尝试以下解决方法,这可能会对性能造成一些影响(您应该只为FIRST匹配项获得结果):SELECT mycolumn FROM mytable WHERE&nbsp;&nbsp; &nbsp; mycolumn = 'case' AND&nbsp;&nbsp; &nbsp; CAST(mycolumn AS VARBINARY(10)) = CAST('Case' AS VARBINARY(10))&nbsp;SELECT mycolumn FROM mytable WHERE&nbsp;&nbsp; &nbsp; mycolumn = 'case' AND&nbsp;&nbsp; &nbsp; CAST(mycolumn AS VARBINARY(10)) = CAST('caSE' AS VARBINARY(10))&nbsp;SELECT mycolumn FROM mytable WHERE&nbsp;&nbsp; &nbsp; mycolumn = 'case' AND&nbsp;&nbsp; &nbsp; CAST(mycolumn AS VARBINARY(10)) = CAST('case' AS VARBINARY(10))&nbsp;-- if myColumn has an index, you will likely benefit by adding&nbsp;-- AND myColumn = 'case'&nbsp;

扬帆大鱼

SQL服务器确定由大小写COLLATION。COLLATION 可以在不同的级别设置。服务器级数据库级列级表达水平这里是MSDN参考。可以COLLATION按Raj More's答案中提到的在每个级别检查。检查服务器排序规则SELECT SERVERPROPERTY('COLLATION')检查数据库整理SELECT DATABASEPROPERTYEX('AdventureWorks', 'Collation') SQLCollation;检查列排序规则select table_name, column_name, collation_namefrom INFORMATION_SCHEMA.COLUMNSwhere table_name = @table_name检查表达式排序规则对于表达式级别,COLLATION您需要查看表达式。:)如下面的示例所示,它通常位于表达式的末尾。SELECT name FROM customer ORDER BY name COLLATE Latin1_General_CS_AI;归类说明为了获得每个COLLATION值的描述,请尝试此。SELECT * FROM fn_helpcollations()而且您应该看到类似这样的内容。您总是可以放一个WHERE子句进行过滤,并且只为您查看描述COLLATION。您可以在此处找到归类列表。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

SQL Server