ありがとうスコット、
しばらくして、これを管理する良い方法を見つけました。
基本的に、ビルドに関連付けられている現在の変更セットを取得するタスクを作成し (私の質問のポイント 1 は問題ではありません)、それらをループして .sql ファイルを探します。それらのリストを取得したら、変更スクリプトを作成したり、ターゲット データベースに対してそれらを実行したりできます。
コードは次のようになります。
TeamFoundationServer tfs = new TeamFoundationServer(TfsServerUrl);
VersionControlServer vcs = (VersionControlServer)tfs.GetService(typeof(VersionControlServer));
var buildServer = (IBuildServer)tfs.GetService(typeof(IBuildServer));
IBuildDetail build = buildServer.GetBuild(
new Uri(BuildUri)
, null
, QueryOptions.All
);
build.RefreshAllDetails();
var changesets = InformationNodeConverters.GetAssociatedChangesets(build);
foreach (var changesetSummary in changesets)
{
Changeset changeSet = vcs.GetChangeset(changesetSummary.ChangesetId);
sqlFilePaths.AddRange(
ProcessChangeSet(changeSet)
);
}
ProcessChangeSet 内のコードは次のようになります
List<string> sqlFilePaths = new List<string>();
foreach (Change change in changeSet.Changes)
{
if ((change.Item.ItemType == ItemType.File)
&& (change.Item.ServerItem.EndsWith(".sql", StringComparison.OrdinalIgnoreCase))
)
{
sqlFilePaths.Add(
sqlPath
);
}
}
return sqlFilePathes;
しかし、誰かが望むなら、喜んで完全なコードを提供します。ストアド プロシージャがシステム全体で同期されていることを確認します。これにより、データベース内で手動で管理するスキーマの変更のみが残ります。これは喜んで行います。