我有一个表格,列上有一个唯一约束。我的数据具有有意义的尾随空格,因此'foo'
和'foo '
有明显不同。但是,如果我尝试为每个值添加一行,则会违反列上的唯一约束。
如果列是主键,我会收到此错误:
违反PRIMARY KEY约束' PK_Foo'。无法在对象' dbo.Foo'中插入重复键。重复键值为(foo)。
如果列具有唯一约束,则会出现此错误:
无法在对象' dbo.Foo'中插入重复的键行。具有唯一索引' IX_Foo'。重复键值为(foo)。
以下是我想传递的脚本。
SET ANSI_PADDING ON -- this has no effect, I've included it to preempt the suggestion
GO
CREATE TABLE [dbo].[Foo](
[Bar] [varchar](50) NOT NULL,
[Baz] [varchar](50) NOT NULL,
CONSTRAINT [PK_Foo] PRIMARY KEY CLUSTERED
(
[Bar] ASC
)
) ON [PRIMARY]
GO
CREATE UNIQUE NONCLUSTERED INDEX [IX_Foo] ON [dbo].[Foo]
(
[Baz] ASC
)
GO
INSERT INTO [dbo].[Foo] (Bar, Baz) VALUES ('foo', '1')
INSERT INTO [dbo].[Foo] (Bar, Baz) VALUES ('foo ', '2')
INSERT INTO [dbo].[Foo] (Bar, Baz) VALUES ('1', 'foo')
INSERT INTO [dbo].[Foo] (Bar, Baz) VALUES ('2', 'foo ')
SET ANSI_PADDING OFF