我正在使用 Microsoft SQL Server 2008 R2(带有最新的服务包/补丁)并且数据库排序规则是 SQL_Latin1_General_CP1_CI_AS。
以下代码:
SET ANSI_PADDING ON;
GO
CREATE TABLE Test (
Code VARCHAR(16) NULL
);
CREATE UNIQUE INDEX UniqueIndex
ON Test(Code);
INSERT INTO Test VALUES ('sample');
INSERT INTO Test VALUES ('sample ');
SELECT '>' + Code + '<' FROM Test WHERE Code = 'sample ';
GO
产生以下结果:
(1 行受影响)
消息 2601,第 14 层,状态 1,第 8 行
无法在具有唯一索引“UniqueIndex”的对象“dbo.Test”中插入重复的键行。重复键值为 (sample )。
该语句已终止。
——————————————————</p>
>样品<
(1 行受影响)
我的问题是:
- 我假设索引不能存储尾随空格。谁能指出我指定/定义此行为的官方文档?
- 是否有更改此行为的设置,即使其将“sample”和“sample”识别为两个不同的值(顺便说一下),因此两者都可以在索引中。
- 为什么在地球上是 SELECT 返回一行?SQL Server 必须对 WHERE 子句中的空格做一些非常有趣/聪明的事情,因为如果我删除索引中的唯一性,两个 INSERT 都将运行正常,并且 SELECT 将返回两行!
任何正确方向的帮助/指针将不胜感激。谢谢。