我在SQL Server 2008中有一个表:
if($this->email->send())
{
$data['emailstr'] = "email has been sent";
}
else
{
$data['emailfail'] = "could not send the email.";
}
该表上的唯一索引:
CREATE TABLE [dbo].[Pages](
[Id] [uniqueidentifier] NOT NULL,
[PageName] varchar(400) NOT NULL,
[Count] int NOT NULL,
CONSTRAINT [PK_Pages] PRIMARY KEY CLUSTERED
(
[Id] ASC
)) ON [PRIMARY]
我从一个文本文件中获取了一堆页面名称,我将其分组到Linq并计算出现次数。
CREATE UNIQUE NONCLUSTERED INDEX [IX_PageName] ON [dbo].[Pages]
(
[PageName] ASC
)
我知道Linq中对象的分组与Ling不同,因为IEnumerable分组区分大小写,而T-SQL中的索引忽略varchar末尾的空格。这就是为什么我使用上面的var data = pages.GroupBy(x => x.PageName.ToLower().Trim())
.Select(x => new Page()
{
Id = Guid.NewGuid(),
PageName = x.Key,
Count = x.Count(),
})
.ToList();
和ToLower()
进行分组,但索引异常仍然会触发。我在文本文件的页面名称中有很多非alpha carachters(正斜杠,反斜杠,逗号,点等),但我无法弄清楚哪些是导致异常的。
修改
这是调试时遇到的异常。
Trim()
SOLUTION:
感谢@Panagiotis Kanavos,我用Sql探查器解决了它。一些字符串在字符串的中间有亚洲字母,例如嘊和我的排序规则SQL_Latin1_General_CP1_CI_AS将它们存储为问号。仍然不确定这是一个重复的问题,因为它与尾随空白无关。
答案 0 :(得分:-1)
在分组时,但在将数据插入表格时,您会收到错误。 请参阅此答案:Behavior of unique index, varchar column and (blank) spaces,您将看到无法将数据插入到具有唯一索引的列中,该列仅由尾随空格不同。