代码之家  ›  专栏  ›  技术社区  ›  Kent Boogaart

为什么此SQL脚本失败?

  •  2
  • Kent Boogaart  · 技术社区  · 16 年前

    我正在尝试对SQL Server2005运行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或模型数据库。

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

    作为参考,执行脚本的代码如下(我使用的是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 回复  |  直到 16 年前
        1
  •  3
  •   Kent Boogaart    16 年前
    sp_fulltext_database 'enable'
    

    它是字符串参数,不是保留字。

    肯特编辑: 我打了个记号给奎斯诺代表,但要详细说明,如果我加上我的 USE database 语句在我的脚本顶部,它起作用。因为我不明白的原因,当我执行 使用数据库 作为同一会话中的单独语句(请参阅我的原始代码)。