テーブルが最近作成された場合は、デフォルトトレースから情報を収集できます。以下のクエリは、オブジェクト作成イベントと変更イベントをリストします。デフォルトトレースはロールオーバトレースであるため、フォレンジック情報はアクティビティに基づいて制限されます。
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文を見つけることができます。ソリューションにデータベースプロジェクトを関連付けると、別の方法で見つけることができます。これらの2つのケースでは、create table 'TableName'を検索できます。 –