Предикат CONTAINSTABLE завершается ошибкой, когда вызывается несколько раз за короткое время - PullRequest
0 голосов
/ 16 февраля 2012

У меня довольно любопытная проблема ... Я написал хранимую процедуру с предикатом CONTAINSTABLE; что-то вроде

SELECT dbo.MyTable.MyPK
FROM   dbo.MyTable INNER JOIN
       CONTAINSTABLE(dbo.MyTable, FullTextField, 'mysearch') AS tbl1 
            ON tbl1.[KEY] = dbo.MyTable.MyPK

Если я запускаю этот SP с SQL Server Management Studio, все в порядке.

Теперь я подготовил набор автоматических тестов, чтобы оценить эффективность моей работы под большим весом ... Я вызываю своего SP несколько раз, с разными параметрами, несколько раз, и вот в чем проблема: если я запускаю свой набор тестов, он не возвращает неправильный результат (например, 1 результат, а я ожидаю 3 результата и т. Д.). на...). Но если я запускаю свой набор тестов в режиме отладки, проходя через мой тестовый код, ошибок не возникает. Более того, если я поймаю неправильный результат и попытаюсь повторно выполнить SP, который дал неправильный результат (просто поместив условную точку останова в условие ошибки и перетащив указатель выполнения в Visual Studio ...), повторное выполнение вернет правильный результат !!!

Что я могу сделать ???

Есть идеи?

Большое спасибо за вашу помощь !!

Пока, черги

1 Ответ

1 голос
/ 16 февраля 2012

Очевидно, что выполнение одного и того же оператора для вашей базы данных не должно приводить к разным результатам, а все остальное будет одинаковым.Что-то меняется.

Запустите SQLProfile, пока вы шагаете по коду, чтобы убедиться, что:

  1. SQL, который, по вашему мнению, вы отправляете в базу данных, действительно поражает базу данных
  2. Ни один другой пользователь не обновляет базу данных, пока вы шагаете

Убедитесь, что в трассировке своего профиля вы можете идентифицировать используемое вами соединение (простой способ - изменить ваше соединениестрока, установив имя приложения).Когда вы шагаете по своему коду, следите за трассировкой профиля.Скопируйте SQL, который вы видите там, в SSMS и запустите его напрямую, чтобы подтвердить результаты.В конце дня вы сможете изолировать это от необработанного TSQL, работающего в SSMS, чтобы выяснить, в чем проблема.

...