允许 SQL Server 唯一约束中的尾随空格差异

Ste*_*ser 5 sql sql-server

我有一个表,其中有一列具有唯一约束。我的数据具有有意义的尾随空格,因此'foo'和'foo '是有意义的不同。但是,如果我尝试为每个值添加一行,则会违反该列的唯一约束。

如果该列是主键,我会收到以下错误:

违反主键约束“PK_Foo”。无法在对象“dbo.Foo”中插入重复的键。重复的键值为 (foo )。

如果该列具有唯一约束,我会收到此错误:

无法在具有唯一索引“IX_Foo”的对象“dbo.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
Run Code Online (Sandbox Code Playgroud)