Microsoft.SqlServer.Management.Smoオブジェクトを使用してデータベーススキーマをエクスポートする簡単なユーティリティをC#で構築しました。フルテキストインデックスを追加するまで、これは大きな成果を上げています。Microsoft.SqlServer.Management.Smoを使用してSQLスキーマをプログラムでエクスポートする方法
フルテキストインデックスを作成するためにSQLをエクスポートすると、インデックスに定義されている列は含まれません。たとえば、 "Recipe"という名前のテーブルがあり、 "RecipeName" "Description"という名前のFTインデックスに2つの列が含まれているとします。私のユーティリティを使用してスキーマをダンプすると、次の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);
}
}
誰かが私に欠けているものを見つけることができますか?
列を別々にスクリプトする必要がありますか?あなたはする必要はありません。 http://technet.microsoft.com/en-us/library/microsoft.sqlserver.management.smo.fulltextindexcolumn.script(v=sql.100).aspx –
ちょっと、どこにでもあなたのコードをオープンソース化しましたか?私は似たようなことに興味があります。 – Gili
いいえ、申し訳ありません。私はこのコードのソースをオープンできません。 – BitsEvolved