2017-02-10 119 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