【问题标题】:SQL Server : reverse engineering view and stored procedureSQL Server:逆向工程视图和存储过程
【发布时间】:2017-06-29 01:32:57
【问题描述】:

我需要你的帮助。

例如,我有一个 SQL Server 视图 MyView

Adb.vs.MyView

有列:

ID
Name
Address
Email
Phone

视图背后的逻辑是下一个

SELECT
    Ac.AccountID AS ID,
    Ac.AccountName AS Name,
    Ad.Main_Adress AS Address,
    Em.Main_Email AS Email,
    Concat(Ph.Phone_Area_Code,Ph.Mobile_Phone_Number) AS Phone  
FROM
    Bdb.dbo.Account AS Ac
INNER JOIN
    Cdb.dbo.Address AS Ad ON Ac.AccountID = Ad.AccountID
INNER JOIN
    Cdb.dbo.Emails AS Em ON Ac.AccountID = Em.AccountID
INNER JOIN
    Cdb.dbo.PhoneBook AS Ph ON Ac.AccountID = Ph.AccountID

注意:

所有这些表之间没有建立 KEY 关系。

我的目标是对该视图进行逆向工程以获得下一种结果:

请建议任何类型的工具/工具脚本来执行此操作。

另外,如果有人知道 Rev.En 的类似解决方案。用于将数据填充到表中的存储过程非常感谢

贝克。在不久的将来,我将需要反转大量此类视图和存储过程。

提前感谢您的任何支持!

【问题讨论】:

  • 不太可能,因为视图的输出列在源表和列中可能不直接相关。它们可能是基于源表(或从其他表和视图获取其输入的其他视图)中的多个列的值进行计算的表达式的结果,或者就此而言,输出可能是不相关的常量表达式任何表格字段,或当前日期时间等环境数据。
  • 要求我们推荐或查找书籍、工具、软件库、教程或其他非现场资源的问题对于 Stack Overflow 来说是题外话,因为它们往往会吸引固执己见的答案和垃圾邮件。

标签: sql-server tsql reverse-engineering


【解决方案1】:

查看系统视图。您想要的大部分内容可能在 INFORMATION_SCHEMA.VIEW_COLUMN_USAGE 中可用。例如:

USE Adb
GO

Select * from INFORMATION_SCHEMA.VIEW_COLUMN_USAGE
where VIEW_NAME='MyView'
GO

【讨论】:

    【解决方案2】:

    视图只是存储的 SQL 脚本,SQL Server 作为子选择添加到您的查询中。因此,所使用的字段实际上并没有以与表定义相同的方式保存在 SQL Server 中。最好的办法是使用 SQL Server Management Studio 编写所有视图的脚本,并将文件插入到诸如 General SQL Parser 之类的工具中,该工具可以输出该脚本中使用的列和表。

    它并不完美,但应该能让你朝着你想要实现的目标前进。你可以免费试用here.

    【讨论】:

      猜你喜欢
      • 2010-09-09
      • 1970-01-01
      • 2011-01-01
      • 2014-12-20
      • 2015-05-19
      • 2020-12-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多