【发布时间】:2013-10-18 00:44:24
【问题描述】:
当我在嵌入了“%”字符的查询中使用 LIKE 子句时,查询不会返回预期的行。但是如果我使用一个常量字符串,它会按预期工作。这只会在我使用 StartsWith (LIKE 'x%') 而不是 Contains (LIKE '%x%') 时引起问题。
我做错了什么!?!
重现代码(最终查询出乎意料):
DECLARE @p__linq__StartsWith nvarchar
SET @p__linq__StartsWith = N'm%'
DECLARE @p__linq__Contains nvarchar
SET @p__linq__Contains = N'%m%'
-- OK: Returns "Me" and "Not Me"
SELECT * FROM
(SELECT N'Me' AS F UNION ALL SELECT N'Not Me' AS F) x
WHERE f LIKE N'%m%'
-- OK: Returns "Me"
SELECT * FROM
(SELECT N'Me' AS F UNION ALL SELECT N'Not Me' AS F) x
WHERE f LIKE N'm%'
-- OK: Returns "Me" and "Not Me"
SELECT * FROM
(SELECT N'Me' AS F UNION ALL SELECT N'Not Me' AS F) x
WHERE f LIKE @p__linq__Contains
-- Unexpected: Returns nothing
-- And why doesn't the last query do the same thing???
SELECT * FROM
(SELECT N'Me' AS F UNION ALL SELECT N'Not Me' AS F) x
WHERE f LIKE @p__linq__StartsWith
环境:Entity Framework 5 针对 SQL Server 2012 SP1 生成的 SQL。检查在 SQL 2000 和 2008R2 SP2 上发生了相同的行为。
【问题讨论】:
标签: entity-framework tsql sql-like