为什么这个SQL脚本失败了?

时间:2010-01-20 12:04:59

标签: sql scripting full-text-search

我正在尝试针对SQL Server 2005运行SQL脚本,作为我的集成测试设置的一部分。如果我从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');

我得到了一个不同的错误:

  

无法在master中使用全文搜索,   tempdb或model database。

这对我来说毫无意义。正在使用正确的数据库

作为参考,执行脚本的代码如下所示(我正在使用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();
    }
}

有谁能告诉我我需要做些什么才能让它发挥作用?

谢谢,
肯特

1 个答案:

答案 0 :(得分:3)

sp_fulltext_database 'enable'

这是一个字符串参数,而不是保留字。

编辑KENT:我标记为给Quassnoi代表的答案。但是要详细说明,如果我将USE database语句添加到我的脚本顶部,它就可以了。由于我不理解的原因,当我在同一会话中执行USE database作为单独的语句时,它不起作用(参见我的原始代码)。