我正在编写一个功能,用户可以输入几个单词来搜索数据库。当我将其移至 systest 时,它的代码停止正常工作。
在 systest 中,查询中仅使用搜索词的最后一个词。
我将相关代码带入 LinqPad,看看是否可以复制该问题。它对 dev 数据库正常工作,并继续对 systest 数据库失败
var cleanTextParts = Regex.Replace("foot pain", @"[^\w]", " ", RegexOptions.None)
.ToLower()
.Split(' ')
.Where(s => !string.IsNullOrEmpty(s));
cleanTextParts.Dump();
var query = ClinicalFindings.AsQueryable();
foreach (var s in cleanTextParts)
{
query = query.Where(code => code.Description.ToLower().Contains(s));
}
var results = query.ToList();
results.Dump();
当我对 Dev 运行它时,这是正在生成并运行的 SQL:
exec sp_executesql N'SELECT [t0].[ClinicalFindingsID], [t0].[ID], [t0].[Description], [t0.[Preferred]
FROM [ClinicalFindings] AS [t0]
WHERE (LOWER([t0].[Description]) LIKE @p0) AND (LOWER([t0].[Description]) LIKE @p1)',N'@p0 varchar(8000),@p1 varchar(8000)',@p0='%pain%',@p1='%foot%'
这是针对 Systest 的:
exec sp_executesql N'SELECT [t0].[ClinicalFindingsID], [t0].[ID], [t0].[Description], [t0.[Preferred]
FROM [ClinicalFindings] AS [t0]
WHERE (LOWER([t0].[Description]) LIKE @p0) AND (LOWER([t0].[Description]) LIKE @p1)',N'@p0 varchar(8000),@p1 varchar(8000)',@p0='%pain%',@p1='%pain%'
注意用于 where 子句的参数的区别:@p0= '%pain%' ,@p1='%pain%' vs @p0= '%foot%' ,@p1='%pain%'
开发是 SQL 2008 R2 系统测试是 SQL 2005
我打算将数据库移动到 Systest 中的 2008 R2 实例,以测试问题是否真的是由数据库版本引起的。
在不移动到其他服务器的情况下如何解决这个问题?