Почему этот сценарий SQL не работает? - PullRequest
2 голосов
/ 20 января 2010

Я пытаюсь запустить сценарий SQL для SQL Server 2005 как часть настройки для моих интеграционных тестов. Сценарий прекрасно работает, если я выполняю его из SQL Server Management Studio. Однако при программном выполнении эта часть сценария, которая включает полнотекстовый поиск, отказывается работать:

-- lots of tables and indexes created above

create unique nonclustered index [IX_Id] on [MyTable] ( [Id] asc )

-- this line fails
sp_fulltext_database enable
create fulltext catalog MyCatalog with accent_sensitivity = off as default
create fulltext index on MyTable([Title],[Content]) key index IX_Id with change_tracking auto

Я получаю ошибку:

Неверный синтаксис рядом с «enable».

Если я удаляю строки, относящиеся к полному тексту, все работает нормально. Если я изменю sp_fulltext_database enable вызов на это:

EXEC ('sp_fulltext_database enable');

Я получаю другую ошибку:

Невозможно использовать полнотекстовый поиск в мастере, база данных tempdb или модель.

Это не имеет никакого смысла для меня вообще. Правильная база данных используется .

Для справки, код, выполняющий скрипт, выглядит следующим образом (я использую NHibernate):

private static void InitializeDatabase()
{
    var sessionFactory = new NHibernate.Cfg.Configuration().Configure().BuildSessionFactory();

    using (var session = sessionFactory.OpenSession())
    {
        session.CreateSQLQuery("IF DB_ID('" + databaseName + @"') IS NOT NULL DROP DATABASE """ + databaseName + @""";").ExecuteUpdate();
        session.CreateSQLQuery(@"CREATE DATABASE """ + databaseName + @""";").ExecuteUpdate();
        session.CreateSQLQuery(@"USE """ + databaseName + @""";").ExecuteUpdate();
        session.CreateSQLQuery(GetCreationScript()).ExecuteUpdate();
    }
}

Может кто-нибудь сказать мне, что мне нужно сделать, чтобы это заработало?

Спасибо
Kent

1 Ответ

3 голосов
/ 20 января 2010
sp_fulltext_database 'enable'

Это строковый параметр, а не зарезервированное слово.

РЕДАКТИРОВАТЬ ПО КЕНТУ: Я отметил как ответ, чтобы дать Quassnoi респ. Но для уточнения, если я добавлю свое USE database утверждение в начало моего сценария, это работает. По причинам, которые я не понимаю, это не работает, когда я выполняю USE database как отдельный оператор в том же сеансе (см. Мой оригинальный код).

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