6

Microsoft.SqlServer.Management.Smoオブジェクトを使用してデータベーススキーマをエクスポートする単純なユーティリティをC#で構築しました 。全文索引を追加するまで、これはうまく機能してきました。

フルテキストインデックスを作成するためにSQLをエクスポートする場合、インデックスで定義されている列は含まれません。たとえば、「RecipeName」「Description」という名前のFTインデックスに2つの列が含まれている「Recipes」という名前のテーブルがあるとします。ユーティリティを使用してスキーマをダンプすると、次のSQLが生成されます。

CREATE FULLTEXT INDEX ON [dbo].[Recipes]
KEY INDEX [PK_Recipes]ON ([ft], FILEGROUP [PRIMARY])
WITH (CHANGE_TRACKING = AUTO, STOPLIST = SYSTEM)

私がダンプすることを期待しているのはこれです(列に注意してください):

CREATE FULLTEXT INDEX ON [dbo].[Recipes](
    [Description] LANGUAGE [English], 
    [RecipeName] LANGUAGE [English]
)
KEY INDEX [PK_Recipes]ON ([ft], FILEGROUP [PRIMARY])
WITH (CHANGE_TRACKING = AUTO, STOPLIST = SYSTEM)

データベースファイルからスキーマを生成するC#は次のとおりです。

static void GenerateScript(string sourceDbPath, string destinationScriptPath)
{
    try
    {
        string           connString = string.Format(@"Data Source=.;AttachDbFilename={0};Integrated Security=True;User Instance=True", sourceDbPath);
        SqlConnection       sqlConn = new SqlConnection(connString);
        ServerConnection serverConn = new ServerConnection(sqlConn);
        Server               server = new Server(serverConn);            
        Database           database = server.Databases[sourceDbPath];
        Transfer           transfer = new Transfer(database);
        ScriptingOptions    options = new ScriptingOptions();

        options.AppendToFile = false;       // Overwrite file
        options.ClusteredIndexes = true;
        options.Indexes = true;
        options.DriAll = true;
        options.Triggers = true;
        options.Bindings = true;
        options.Default = true;
        options.IncludeDatabaseContext = false;
        options.IncludeHeaders = true;
        options.FullTextIndexes = true;

        options.SchemaQualify = true;
        options.SchemaQualifyForeignKeysReferences = true;
        options.ScriptSchema = true;
        options.ScriptData = false;
        options.ScriptDrops = false;

        options.FileName = destinationScriptPath;
        transfer.Options = options;
        transfer.CopyAllFullTextCatalogs = true;
        transfer.CopyAllFullTextStopLists = true;
        transfer.CopyAllTables = true;

        transfer.ScriptTransfer();
    }
    catch(Exception ex)
    {
        Console.WriteLine(ex.ToString());
        Environment.Exit(-1);
    }
}

誰かが私が欠けているものを見つけることができますか?

4

1 に答える 1

0

フルテキストインデックスの作成ステートメントに列を含めるスクリプトオプションの組み合わせを見つけることができませんでした。

そこで、代わりに、 sp_help_fulltext_tablesおよびsp_help_fulltext_columnsストアドプロシージャを実行して、データベースに全文インデックス情報を照会しました。これにより、ステートメントを手作業で作成することができました。

理想的ではありませんが、機能します。

于 2012-06-05T06:08:34.770 に答える