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

时间:2010-11-03 04:18:52

标签: 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

错误讯息是

  

消息7630,级别15,状态3,“此处是”附近存在语法错误。

 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 

如何解决这个问题?

1 个答案:

答案 0 :(得分:3)

CONTAINS运营商可能会发生此错误。

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

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

你必须将每个学期分开。

有关详细信息,请参阅TSQL CONTAINS() MSDN文档,特别注意示例部分 - 特别有趣的可能是项目J.使用CONTAINS验证行插入

要解决这个问题,我建议:

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

  • 将您的nvarchar设置为'here it is',在空格split that string之后的存储过程中构建一个新字符串,并构建一个格式为CONTAINS()的新字符串。< / p>