当我使用空格分隔值(例如@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
如何解决这个问题?
答案 0 :(得分:3)
CONTAINS
运营商可能会发生此错误。
SQL Server期望多关键字将由布尔运算符(AND
或OR
)分隔或用引号括起来。
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>