[英]SQL String format for Full Text Search in C# Entity Framework
我正在尝试创建一个参数化的sql字符串,当在数据库服务器上执行该字符串时,我希望以此结束该字符串,该字符串在执行时将返回所需的结果:
SELECT * FROM OrderHeader WHERE FacilityId = 9 AND CONTAINS(*,'"Rich*"')
我已经尝试了下面的三种尝试和结果,但是无法像上面的目标语句那样将其显示出来,结果是第一个语句中的syntax error near '@p1'
出现syntax error near '@p1'
,而第二个结果为零陈述。
尝试1:
string sql = "SELECT * " +
"FROM OrderHeader " +
"WHERE FacilityId = @p0 AND CONTAINS(*,\"@p1*\")";
var orderByCustomerFullTextQuery = base.DbSet.SqlQuery(sql, intFacilityId, strSearchTerm).AsQueryable();
exec sp_executesql N'SELECT * FROM OrderHeader WHERE FacilityId = @p0 AND CONTAINS(*,"@p1*")',N'@p0 int,@p1 nvarchar(4)',@p0=9,@p1=N'Rich'
尝试2:
string sql = "SELECT * " +
"FROM OrderHeader " +
"WHERE FacilityId = @p0 AND CONTAINS(*,'\"@p1*\"')";
var orderByCustomerFullTextQuery = base.DbSet.SqlQuery(sql, intFacilityId, strSearchTerm).AsQueryable();
exec sp_executesql N'SELECT * FROM OrderHeader WHERE FacilityId = @p0 AND CONTAINS(*,''"@p1*"'')',N'@p0 int,@p1 nvarchar(4)',@p0=9,@p1=N'Rich'
尝试3:
string sql = "SELECT * " +
"FROM OrderHeader " +
"WHERE FacilityId = @p0 AND CONTAINS(*,\'\"@p1*\"\')";
var orderByCustomerFullTextQuery = base.DbSet.SqlQuery(sql, intFacilityId, strSearchTerm).AsQueryable();
exec sp_executesql N'SELECT * FROM OrderHeader WHERE FacilityId = @p0 AND CONTAINS(*,''"@p1*"'')',N'@p0 int,@p1 nvarchar(4)',@p0=9,@p1=N'Rich'
尝试这个:
string sql = "SELECT * " +
"FROM OrderHeader " +
"WHERE FacilityId = @p0 AND CONTAINS(*,'\"' + @p1 + '*\"')";
其他尝试的问题是@p1
变量在sp_executesql
上下文中作为较大的"@p1*"
字符串文字的一部分进行了评估。 它不是查询中的元素,只是字符串文字的一部分。 我们可以将@p1
变量与完整的"@p1*"
值分开,将其分成三部分:前导引号的文字,仅@p1
,尾随通配符和引号的文字。 它应该给您等效的执行以下查询的条件:
SELECT * FROM OrderHeader WHERE FacilityId = 9 AND CONTAINS(*,'"' + 'Rich' + '*"')
失败(尽管它确实应该工作),您还可以在将值分配给参数时尝试对其进行调整:
string sql = "SELECT * " +
"FROM OrderHeader " +
"WHERE FacilityId = @p0 AND CONTAINS(*, @p1)";
...SqlQuery(sql, intFacilityId, "\"" + strSearchTerm + "*\"").AsQueryable();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.