2016-11-07 85 views
1

我需要找到的是重新創建某個表的過程,使用了哪些數據源,以及哪些腳本(如果有的話)。& c。那麼,如果以手動方式或通過查詢創建表,並且數據是從外部數據導入的數據,還是從數據庫中已有的表/視圖導入,那麼是否有可能以某種方式區分系統視圖或類似情況?我已經知道誰創造了什麼時間。我幾乎沒有結果篩選整個數據庫,現在我正在尋找元數據中的提示。在SQL-Server中創建表的方式

+1

沒有這樣的元數據。與存儲過程不同,表僅作爲其內部表示進行存儲。創建它們的腳本不會在任何地方記錄。從引擎的角度來看,沒有辦法「手動創建表」 - 所有事情最終總是以(可能生成的)CREATE TABLE語句發生。 (或者'SELECT INTO',如果你想變得迂腐。) –

+1

沒有辦法知道創建表的來源。想想這個......最後它只是執行一個sql腳本。 SSMS只是創建一個腳本併爲您執行它。 –

+0

您可以使用第三方工具(如RedGate)查找create table語句。您可以找到何時將數據庫項目關聯到解決方案的另一種方法。在這兩種情況下,您可以搜索創建表'TableName'。 –

回答

0

如果該表最近已創建,則可以從默認跟蹤中收集信息。下面的查詢將列出對象創建和更改的事件。默認跟蹤是翻轉跟蹤,因此取證信息將根據活動進行限制。

SELECT 
    trace.DatabaseName 
    ,trace.ObjectName 
    ,te.name AS EventName 
    ,tsv.subclass_name 
    ,trace.EventClass 
    ,trace.EventSubClass 
    ,trace.StartTime 
    ,trace.EndTime 
    ,trace.NTDomainName 
    ,trace.NTUserName 
    ,trace.HostName 
    ,trace.ApplicationName 
    ,trace.Spid 
FROM (SELECT REVERSE(STUFF(REVERSE(path), 1, CHARINDEX(N'\', REVERSE(path)), '')) + N'\Log.trc' AS path 
    FROM sys.traces WHERE is_default = 1) AS default_trace_path 
CROSS APPLY fn_trace_gettable(default_trace_path.path, DEFAULT) AS trace 
JOIN sys.trace_events AS te ON 
    trace.EventClass=te.trace_event_id 
JOIN sys.trace_subclass_values AS tsv ON 
    tsv.trace_event_id = EventClass 
    AND tsv.subclass_value = trace.EventSubClass 
WHERE te.name IN(N'Object:Altered', N'Object:Created') 
    AND tsv.subclass_name = 'Commit' 
ORDER BY trace.StartTime;