与我一起工作的开发人员团队正在使用 SQL 数据项目来完成我们必须针对现有数据库进行的大量工作。我们已经有几个星期了,并且遇到了一些问题,但是体验总体上还是不错的。
但是,当我们开始部署到生产环境时,dba 团队拒绝接受 DACPAC 作为部署方法。相反,他们希望看到每个 DML 或 DDL 语句的传统脚本。
目前的想法是在完成的 SQL 项目和生产环境之间创建一个差异脚本,然后将其解析为单独的脚本。不好我知道。
要解析差异脚本,似乎有两个选项:
- 根据批处理分隔符命令 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
}
从每个列定义中,我希望找到一个长度属性或类似属性。但是,我也有一个偷偷摸摸的怀疑,即您可以使用我遇到的访问者模式来重新解析每个列定义。有任何想法吗?