我需要以编程方式(C#)确定连接数据库(可能是Oracle 11g或Sql Server 2008以上)是否已设置为区分大小写,因此我知道何时比较两个字符串(一个从数据库中检索到的) ,用户输入的一个)是否进行区分大小写的比较。
这可能,如果是,我该怎么做?
TIA
答案 0 :(得分:1)
您可以使用case
和select
SELECT CASE WHEN 'A' = 'a' THEN 'Insensitive' ELSE 'Sensitive' END
以上对于整个数据库会话非常通用。更具体地说,您必须更多地了解每个DBMS的数据库配置。
以下针对Oracle的区分大小写配置的检查:
SELECT CASE WHEN COUNT(*) = 2 THEN 'Insensitive' ELSE 'Sensitive' END
FROM NLS_SESSION_PARAMETERS
WHERE (PARAMETER = 'NLS_COMP' AND VALUE = 'LINGUISTIC')
OR (PARAMETER = 'NLS_SORT' AND VALUE = 'BINARY_CI')
以下检查各个级别的特定SQL Server排序规则:
-- Server level
SELECT CASE WHEN SERVERPROPERTY('COLLATION') LIKE '%_CI_%' THEN 'Insensitive' ELSE 'Sensitive' END
-- Database level
SELECT CASE WHEN DATABASEPROPERTYEX('AdventureWorks', 'Collation') LIKE '%_CI_%' THEN 'Insensitive' ELSE 'Sensitive' END
-- Column level
SELECT CASE WHEN COLLATION_NAME LIKE '%_CI_%' THEN 'Insensitive' ELSE 'Sensitive' END
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = @table_name
AND COLUMN_NAME = @column_name
这对于检查案例insentive排序规则并非详尽无遗,但基于SELECT name, description FROM ::fn_helpcollations()
,它似乎相当不错。
SQL Server排序规则的参考(如对OP的评论所述)