2010-01-20 3 views
2

J'essaie d'exécuter un script SQL sur SQL Server 2005 dans le cadre de la configuration de mes tests d'intégration. Le script fonctionne parfaitement bien si je l'exécute depuis SQL Server Management Studio. Cependant, lors de l'exécution par programme, cette partie du script qui permet la recherche de texte intégral refuse de travailler:Pourquoi ce script SQL échoue-t-il?

-- 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 

L'erreur que je reçois est:

Incorrect syntax near 'enable'.

Si je supprime les lignes liées au texte intégral , tout fonctionne bien. Si je change l'appel sp_fulltext_database enable à ceci:

EXEC ('sp_fulltext_database enable'); 

Je reçois une autre erreur:

Cannot use full-text search in master, tempdb, or model database.

Cela n'a aucun sens pour moi du tout. La base de données correcte est en cours d'utilisation.

Pour référence, le code qui exécute le script ressemble à ceci (j'utilise 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(); 
    } 
} 

Quelqu'un peut-il me dire ce que je dois faire pour que cela fonctionne?

Merci,
Kent

Répondre

3
sp_fulltext_database 'enable' 

Il est un paramètre de chaîne, pas un mot réservé.

EDITER PAR KENT: J'ai marqué comme réponse pour donner à Quassnoi le représentant. Mais pour élaborer, si j'ajoute ma déclaration USE database au début de mon script, cela fonctionne. Pour des raisons que je ne comprends pas, cela ne fonctionne pas lorsque j'exécute le USE database en tant qu'instruction distincte dans la même session (voir mon code original).

+0

Non - même problème. Impossible d'utiliser la recherche en texte intégral dans la base de données master, tempdb ou model. –

+0

Ensuite, vous utilisez 'master',' tempdb' ou 'model'. Pourriez-vous s'il vous plaît exécuter le script dans le 'SSMS' (en s'assurant que la bonne base de données est sélectionnée dans la zone de liste déroulante dans le coin supérieur gauche) et vérifier si le problème persiste? – Quassnoi

+0

Salutations Quassnoi - ça me rendait fou. –