如何使用标准SQL提取视图的定义?

时间:2009-09-02 23:10:45

标签: sql views ddl

在尝试自己回答这个问题时,我最终在我的查询字词中添加了“oracle”后遇到了这个小块:

select DBMS_METADATA.GET_DDL('TABLE','<table_name>') from DUAL;

哪个有效,但不便携。我如何在MySQL上做同样的事情? SQLite的?其他

3 个答案:

答案 0 :(得分:3)

FOR SQL Server INFORMATION_SCHEMA.VIEWS将输出长度限制为4000个字符,这对我来说非常不可靠。

以下定义为nvarchar(max)效果更好,适用于多种对象类型(VIEW,SQL_STORED_PROCEDURE,SQL_SCALAR_FUNCTION,SQL_INLINE_TABLE_VALUED_FUNCTION,SQL_TABLE_VALUED_FUNCTION,可能更多,这是我在数据库中看到的)

SELECT TOP 1000
    O.name
    , O.type
    , O.type_desc
    , M.definition
FROM sys.Sql_modules AS M
    LEFT OUTER JOIN sys.objects AS O ON M.object_id=O.object_id

答案 1 :(得分:2)

那么, IS 是一个名为 INFORMATION_SCHEMA 的ANSI标准。包括Microsoft(SQL Server),Oracle,MySQL,Postgres在内的许多供应商都支持它,因此这可能是第一步。

有关详细信息,请参阅此article here

对于视图,有三个INFORMATION_SCHEMA视图:

  • INFORMATION_SCHEMA.VIEWS
  • INFORMATION_SCHEMA.VIEW_COLUMN_USAGE
  • INFORMATION_SCHEMA.VIEW_TABLE_USAGE

“INFORMATION_SCHEMA.VIEWS”视图中有一个名为“VIEW_DEFINITION”的列,因此可能会以一种有点stadandized的方式为您提供所需的信息。

马克

答案 2 :(得分:1)

由于数据库元数据未标准化,因此没有标准方法可以执行此操作。