J'ai une table créée avec:Pourquoi aurait SQLServer instruction select sélectionner des lignes qui correspondent et des lignes correspondant à et ont des espaces de fin
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
J'inséré des données avec ceci:
insert into TestFeature1 (id,leng) values ('1',100);
insert into TestFeature1 (id,leng) values ('1 ',1000);
Lorsque je sélectionne à partir de la table avec celle-ci:
select * from TestFeature1 where id='1';
cela renvoie 2 rangs
1 100
1 1000
pourquoi cela serait-il? pourquoi retourne-t-il la version avec l'espace à la fin même quand la requête spécifie que la valeur est seulement 1 seule, sans espace? LEN() est dangereux pour tester ANSI_PADDING car il est défini pour renvoyer la longueur en excluant les espaces de fin, et DATALENGTH() est préférable comme AdaTheDev dit:
Pour votre information, si vous mettez une clé primaire sur votre deuxième insert [Id] échouera comme un double –