在SQL-Server中创建表的方式

问题描述:

我需要找到的是重新创建某个表的过程,使用了哪些数据源,以及哪些脚本(如果有的话)。& c。那么,如果以手动方式或通过查询创建表,并且数据是从外部数据导入的数据,还是从数据库中已有的表/视图导入,那么是否有可能以某种方式区分系统视图或类似情况?我已经知道谁创造了什么时间。我几乎没有结果筛选整个数据库,现在我正在寻找元数据中的提示。在SQL-Server中创建表的方式

+1

没有这样的元数据。与存储过程不同,表仅作为其内部表示进行存储。创建它们的脚本不会在任何地方记录。从引擎的角度来看,没有办法“手动创建表” - 所有事情最终总是以(可能生成的)CREATE TABLE语句发生。 (或者'SELECT INTO',如果你想变得迂腐。) –

+1

没有办法知道创建表的来源。想想这个......最后它只是执行一个sql脚本。 SSMS只是创建一个脚本并为您执行它。 –

+0

您可以使用第三方工具(如RedGate)查找create table语句。您可以找到何时将数据库项目关联到解决方案的另一种方法。在这两种情况下,您可以搜索创建表'TableName'。 –

如果该表最近已创建,则可以从默认跟踪中收集信息。下面的查询将列出对象创建和更改的事件。默认跟踪是翻转跟踪,因此取证信息将根据活动进行限制。

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;