Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Защо операторът SqlServer select избира редове, които съвпадат, и редове, които съвпадат и имат завършващи интервали

За да преработя отговора си, LEN() не е безопасен за тестване на ANSI_PADDING, тъй като е дефиниран да връща дължината без завършващи интервали, а DATALENGTH() е за предпочитане, както казва AdaTheDev.

Интересното е, че ANSI_PADDING е настройка за време на вмъкване и че се зачита за VARCHAR, но не и за NVARCHAR.

Второ, ако се връща колона със завършващи интервали или се използва '=' за равенство, изглежда има имплицитно съкращаване на завършващия интервал, който възниква.

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Анализиране на I/O производителността за SQL Server

  2. Персонализирана функция с ограничение за проверка SQL Server 2008

  3. Как да изберете имена на колони от множество таблици в SQL Server 2000-2008, които са в набор от имена

  4. SQL PIVOT с три колони

  5. Как да пропуснете интервалите на припокриване в следната заявка, за да получите точното време за проследяване на ден