【发布时间】:2017-05-26 01:35:00
【问题描述】:
与我合作的开发人员团队正在使用 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
}
我希望从每个列定义中找到一个长度属性或类似属性。但是,我也偷偷怀疑您可以使用我遇到的访问者模式来重新解析每个列定义。 有什么想法吗?
【问题讨论】:
标签: c# sql-server sql-server-data-tools dacpac