синтаксическая ошибка в хранимой процедуре при передаче строки, содержащей пробел - PullRequest
2 голосов
/ 03 ноября 2010

Когда я передаю @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 Ответ

3 голосов
/ 03 ноября 2010

Вероятно, эта ошибка возникает в операторе CONTAINS.

SQL Server ожидает, что мульти-ключевые слова будут разделены логическими операторами (AND или OR) или в кавычках.

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

Вам придется разделить каждый член.

Для получения дополнительной информации см. Документацию TSQL CONTAINS () MSDN, в частности, в разделе примеров - особенно интересным может быть Item J. Использование CONTAINS для проверки строкивставка .

Чтобы обойти эту проблему, я бы предложил:

  • попробовать передать предварительно отформатированные условия поиска: ' "here" AND "it" AND "is" '.Я не уверен, сработает ли это на самом деле.

  • с вашим nvarchar как 'here it is', создайте новую строку в хранимой процедуре после разбиения этой строки наи создайте новую строку, отформатированную как CONTAINS() требуется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...