sql - 传递包含空格的字符串时存储过程中出现语法错误

标签 sql tsql sql-server-2008 full-text-search

当我传递带有空格分隔值的 @param1 时,例如 N'here it is',出现语法错误。如果中间没有空格,比如N'hereitis',就没有这样的语法错误。有什么想法吗?

我是这样调用存储过程的,

EXEC @return_value = [dbo].[foo]
  @param1 = N'here it is',
  @param2 = 10,
  @param3 = 10

错误信息是

message 7630, level 15, status 3, there is syntax error near 'here it is'.

 SELECT * 
 FROM (
         SELECT count(*) over() AS [Count],
                 *, ROW_NUMBER() OVER (order by t.indexfoo ASC ) AS rowNum 
         FROM   dbo.tablefoo t        
         WHERE  contains(t.col1,@param1) 
         OR     contains(t.col2,@param1) 
         OR     contains(t.col3,@param1)
      ) tt 
 WHERE  tt.rowNum between @param2 and  @param3 + @param2-1 

如何解决这个问题?

最佳答案

很可能这个错误发生在 CONTAINS运营商。

SQL Server 期望多关键字将由 bool 运算符(ANDOR)分隔或用引号括起来。

WHERE CONTAINS(Name, ' "Mountain" OR "Road" ')

您必须拆分每个术语。

有关详细信息,请参阅 TSQL CONTAINS() MSDN 文档,特别是查看示例部分——特别有趣的可能是Item J. Using CONTAINS to verify a row insertion

要变通,我建议:

  • 尝试传入预先格式化的搜索词:' "here"AND "it"AND "is"'。我不确定这是否真的有效。

  • 将您的 nvarchar 作为 'here it is',在 split that string 之后的存储过程中构建一个新字符串在空间上,并构建一个格式化为 CONTAINS() 要求的新字符串。

关于sql - 传递包含空格的字符串时存储过程中出现语法错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4084194/

相关文章:

sql - 如何将这两个表连接到同一个 Sql 结果中

sql-server-2008 - 有很多长文本字段的SQL表的最佳数据类型

sql - 删除并重新使用存储过程中的临时表

sql-server - T-SQL 替换 XML 节点

c# - 在数据集中填充 3 个表

tsql - 将 varchar 值转换为 int 时转换失败

SQL 将字符串转换为日期格式 112

sql - 单个 SQL 查询一次性更新表中所有列的数据类型

MySQL UPDATE 多连接不工作

sql - 如何加入 dbo.LocalizedLabelView 来获取 Dynamics CRM 中的表单标签?