解析 SQL Server 数据库的脚本

Posted

技术标签:

【中文标题】解析 SQL Server 数据库的脚本【英文标题】:Parsing SQL Server Database's Script 【发布时间】:2011-08-21 08:20:31 【问题描述】:

我目前正在开发一个项目,该项目负责根据其架构生成数据库模型,我想知道 .Net 中是否有任何库能够解析 SQL 脚本文件和允许我:

    从脚本中获取数据库名称

    获取表名

    获取每个表的列

    以及您所知道的用于生成模型的任何内容

任何建议都会有所帮助。

【问题讨论】:

“我目前正在从事一个项目,该项目负责根据其架构生成数据库模型” - erm,VS 2008 和 VS2010 已经具备此能力:数据库项目。失败的 SMO... 我的应用程序是一个基于Web的应用程序,它将托管在非专用服务器上,因此无法直接访问数据库。我希望每个用户都能上传脚本文件并下载生成的模型。 您可以查看Microsoft.Data.Schema.ScriptDom 来解析 TSQL 脚本。 【参考方案1】:

除了 SMO 之外,没有任何图书馆适合这项工作。最好对 sql 系统模式进行查询。请以以下脚本为例:

SELECT 
    SPECIFIC_NAME as SpName, 
    PARAMETER_NAME as ParameterName, 
    DATA_TYPE as DbType, 
    CHARACTER_MAXIMUM_LENGTH as Size  
 FROM INFORMATION_SCHEMA.PARAMETERS 
 WHERE PARAMETER_MODE = 'IN' OR PARAMETER_MODE = 'INOUT'

此脚本获取存储过程参数。或

SELECT * FROM sys.columns WHERE object_id = OBJECT_ID('dbo.yourTableName')

用于获取表格列。 我建议你不要使用 SMO。

【讨论】:

你对 SMO 有什么看法?你能澄清为什么你不会使用 SMO 吗?? 我总是对新版本有问题。这是我的意见。 @Mitch Wheat:我正在阅读 SMO 概述,SMO 是否能够满足我发布的要求? 是的。 SMO 过去的名声不好:它的大多数问题都可以修复。可能感兴趣:mitch-wheat.blogspot.com/2011/07/…【参考方案2】:

比我预期的要多

ANTLR

SQLParser

Fantastic Tutorial-SQL Parser

【讨论】:

以上是关于解析 SQL Server 数据库的脚本的主要内容,如果未能解决你的问题,请参考以下文章

如何转换SQL Server 2008数据库到SQL Server 2005

如何在 sql server 2005 中编写 sql server 数据库图表脚本?

编写整个数据库 SQL-Server 的脚本

sql server怎么导入数据库

生成我的数据库数据的 SQL 脚本 (SQL SERVER)

如何将数据库sql server2008中的数据库生成脚本输出