私が一緒に働いている開発者チームは、既存のデータベースに対して行う必要がある大規模な作業に SQL Data Projects を使用しています。私たちは数週間で、いくつかの落とし穴がありましたが、経験は一般的に良好です.
ただし、本番環境にデプロイするとき、dba チームは DACPAC をデプロイ方法として受け入れることを拒否しました。代わりに、DML または DDL ステートメントごとに従来のスクリプトを見たいと考えています。
現在の考えでは、完成した SQL プロジェクトと本番環境の間で差分スクリプトを作成し、それを個別のスクリプトに解析します。良くないね。
差分スクリプトを解析するには、次の 2 つのオプションがあるようです。
- バッチ区切りコマンド GO に基づいてスクリプトを解析します。かなり基本的なソリューションですが、有望です。
- または、Microsoft.SqlServer.TransactSql.ScriptDom を使用します。これはより将来性のあるものに見えますが、はるかに複雑に見えます。
現在、ScriptDom を試していますが、理解できません。私の現在の問題だけでなく、次のとおりです。
C# で ScriptDOM を使用して、次の SQL を解析しようとしています。
CREATE TABLE dbo.MyTable
(
MyColumn VARCHAR(255)
)
しかし、VARCHAR サイズ (この場合は 255) にアクセスする方法がわかりません。
私が使用しているコードは次のとおりです。
TSqlFragment sqlFragment = parser.Parse(textReader, out errors);
SQLVisitor myVisitor = new SQLVisitor();
sqlFragment.Accept(myVisitor);
public override void ExplicitVisit(CreateTableStatement node)
{
// node.SchemaObjectName.Identifiers to access the table name
// node.Definition.ColumnDefinitions to access the column attributes
}
各列の定義から、長さのプロパティなどを見つけることが期待されていました。ただし、私が苦労している訪問者パターンを使用して、各列定義を再解析できるのではないかという疑念も潜んでいます。何か案は?