一尘不染

为什么SqlServer select语句会选择匹配的行和匹配的行并具有尾随空格的行

sql

我有一个表创建与:

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[TestFeature1](
[Id] [nvarchar](50) NOT NULL,
[Leng] [decimal](18, 0) NOT NULL
) ON [PRIMARY]

GO
SET ANSI_PADDING OFF

我用这个插入数据:

insert into TestFeature1 (id,leng) values ('1',100);
insert into TestFeature1 (id,leng) values ('1 ',1000);

当我从表中选择以下内容时:

select * from TestFeature1 where id='1';

这将返回2行

1   100
1   1000

为什么会这样呢?为什么即使查询指定值仅是1,但没有空格,它也返回最后带有空格的版本?


阅读 127

收藏
2021-05-05

共1个答案

一尘不染

有趣的是,如果您使用LIKE,则可以工作:

select * from TestFeature1 where id LIKE '1'

编辑:
经过更多的研究,我发现其他人与我们进行了相同的对话。看这里。该评论仅在讨论中进行了一半。但是结果是如我们所发现的,要么如上所述使用LIKE,要么添加第二个条件以检查列的DATALENGTH和提供的值是否相同。我更喜欢LIKE路线。

2021-05-05