2017-02-10 121 views
0

我需要一些帮助。SQL Server:反向工程视图和存储过程

例如我有一个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 

注:

无重要关系这一切的表之间建立。

我的目标逆向工程这一观点得到下一个样的结果:

Desired Output

请提出任何形式的工具/工具脚本执行此。

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

bec。我将需要在最近的将来扭转大量此类观点和存储过程。

在此先感谢您的支持!

+1

不容易,因为视图的输出列在源表和列中可能不直接相关。它们可能是基于源表中多个列的值(或从其他表和视图获取输入的其他视图)计算的表达式的结果,或者对于该问题,输出可能是不依赖于常量的表达式任何表格字段或环境数据,如当前日期时间等。 –

+0

问题要求我们推荐或找到书籍,工具,软件库,教程或其他非本地资源,因为它们倾向于堆栈溢出吸引舆论的答案和垃圾邮件。 –

回答

1

视图只是存储的SQL脚本,SQL Server将其添加到您的查询中作为子选择。因此,使用的字段实际上并不像表定义那样保存在SQL Server中。您最好的选择是使用SQL Server Management Studio编写所有视图的脚本,并将这些文件插入到一个工具中,例如General SQL Parser,它可以输出该脚本中使用的列和表。

这不是完美的,但应该让你走向你想要实现的目标。您可以免费试用here.

2

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

USE Adb 
GO 

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