当我传递带有空格分隔值的 @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 运算符(AND
或 OR
)分隔或用引号括起来。
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/