sql >> Database >  >> RDS >> Sqlserver

Waarom zou SqlServer select statement rijen selecteren die overeenkomen en rijen die overeenkomen en volgspaties hebben?

Om mijn antwoord te herwerken, is LEN() onveilig om ANSI_PADDING te testen omdat het is gedefinieerd om de lengte te retourneren exclusief spaties achteraan, en DATALENGTH() heeft de voorkeur zoals AdaTheDev zegt.

Wat interessant is, is dat ANSI_PADDING een instelling voor de invoegtijd is, en dat het wordt gerespecteerd voor VARCHAR maar niet voor NVARCHAR.

Ten tweede, als een kolom met volgspaties wordt geretourneerd of de '=' voor gelijkheid wordt gebruikt, lijkt er een impliciete afkapping van volgspatie plaats te vinden.

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

GO

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

-- verify no spaces inserted at end
select '['+id+']', * from TestFeature1
select datalength(id), * from TestFeature1
go

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

GO

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

-- verify spaces inserted at end, and ANSI_PADDING OFF was not honoured by NVARCHAR
select '['+id+']', * from TestFeature1
select datalength(id), * from TestFeature1
go


  1. Element verwijderen uit array binnen object JSONB

  2. Zoekformulier leidt niet naar de juiste controller in Rails 5.1

  3. Index van ingevoegde rijen ophalen uit een MySQL-database

  4. mysql> gebruik mysql; maar ... FOUT 1044 (42000):Toegang geweigerd voor gebruiker '' @ 'localhost' tot database 'mysql'