我有一个表创建与:
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,但没有空格,它也返回最后带有空格的版本?
有趣的是,如果您使用LIKE,则可以工作:
select * from TestFeature1 where id LIKE '1'
编辑: 经过更多的研究,我发现其他人与我们进行了相同的对话。看这里。该评论仅在讨论中进行了一半。但是结果是如我们所发现的,要么如上所述使用LIKE,要么添加第二个条件以检查列的DATALENGTH和提供的值是否相同。我更喜欢LIKE路线。