SQL Server 2008外键区分大小写

dav*_*rld 1 sql sql-server

SQL Server 2008是否可能具有不区分大小写的数据,例如以下内容将返回数据...

SELECT mycolumn FROM mytable WHERE mycolumn='Case' 
SELECT mycolumn FROM mytable WHERE mycolumn='caSE' 
SELECT mycolumn FROM mytable WHERE mycolumn='case'
Run Code Online (Sandbox Code Playgroud)

如果mytable.mycolumn的值为'CASE',但外键是区分大小写的?

Mic*_*eyn 6

区分大小写由数据库的排序规则设置决定.它影响一切,比较,外键等...

但是,您可以更改特定列或列的排序规则设置,以使其与区分大小写进行比较,而其余数据库保持不区分大小写.例如:

ALTER COLUMN Name VARCHAR(50)  
COLLATE SQL_Latin1_General_CP1_CS_AS 
Run Code Online (Sandbox Code Playgroud)

现在所有的比较Name都将区分大小写.

在给定区分大小写的排序规则的情况下,执行不区分大小写的比较的一种方法是指定每列排序规则作为查询的一部分.如果您使用此方法动态更改排序规则,您可能还希望熟悉排序规则优先级.以下是在查询点指定的排序规则转换的示例:

SELECT Name 
FROM MyTable
WHERE Name = 'CASE' COLLATE SQL_Latin1_General_CP1_CI_AS -- Use case insensitive coll.
Run Code Online (Sandbox Code Playgroud)

可以使用表设计器以SSMS交互式更改列的排序规则(对于大图像而言是抱歉):

在此输入图像描述