执行精确的搜索荣誉空间

时间:2019-03-08 00:41:08

标签: sql-server linq-to-entities

我正在使用SQL Server 2017,并且我的归类为SQL_LATIN1_GENERAL_CP1_CI_ASANSI_PADDING是默认值(ON)。

在我的表中,其中一列的类型为NVARCHAR(255),并且其中一个值的插入方式如下(包括空格):

N'abc '

当我搜索没有空格(N'abc')时,我不想得到N'abc ',但是找到了它。

我知道我可以在插入记录期间删除空格,但是不能更改已经插入的记录。

如何防止通过这种查询找到它?

CREATE TABLE #tmp (c1 nvarchar(255))

INSERT INTO #tmp 
VALUES (N'abc ')

SELECT * 
FROM #tmp 
WHERE c1 = N'abc'

DROP TABLE #tmp

我也找到了这篇文章,但想在查询时避免。

Why the SQL Server ignore the empty space at the end automatically?

我在C#中使用Linq-to-entities,并且通过SQL查询,我可以使用'LIKE'关键字进行搜索,而无需使用百分比字符

SELECT * 
FROM #tmp 
WHERE c1 LIKE N'abc'

但是使用Linq,我不知道如何编写此查询:

entity.Temp.Where(p => p.c1 == "abc");
entity.Temp.Where(p => p.c1.Equals("abc"));
entity.Temp.Where(p => p.c1.Contains("abc"));

1 个答案:

答案 0 :(得分:0)

您可以尝试:

SELECT * FROM #tmp WHERE cast(c1 as varbinary(510)) = cast(N'abc' as varbinary(510))

如果您有很多行,这将非常慢,但是它可以工作。