在SQL-Server中创建表的方式
问题描述:
我需要找到的是重新创建某个表的过程,使用了哪些数据源,以及哪些脚本(如果有的话)。& c。那么,如果以手动方式或通过查询创建表,并且数据是从外部数据导入的数据,还是从数据库中已有的表/视图导入,那么是否有可能以某种方式区分系统视图或类似情况?我已经知道谁创造了什么时间。我几乎没有结果筛选整个数据库,现在我正在寻找元数据中的提示。在SQL-Server中创建表的方式
答
如果该表最近已创建,则可以从默认跟踪中收集信息。下面的查询将列出对象创建和更改的事件。默认跟踪是翻转跟踪,因此取证信息将根据活动进行限制。
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;
没有这样的元数据。与存储过程不同,表仅作为其内部表示进行存储。创建它们的脚本不会在任何地方记录。从引擎的角度来看,没有办法“手动创建表” - 所有事情最终总是以(可能生成的)CREATE TABLE语句发生。 (或者'SELECT INTO',如果你想变得迂腐。) –
没有办法知道创建表的来源。想想这个......最后它只是执行一个sql脚本。 SSMS只是创建一个脚本并为您执行它。 –
您可以使用第三方工具(如RedGate)查找create table语句。您可以找到何时将数据库项目关联到解决方案的另一种方法。在这两种情况下,您可以搜索创建表'TableName'。 –