質問の複製として投稿されたリンク(@Oliver)として、以下のリンクを確認しました。ただし、このクエリは最後の実行スクリプトを返します。それは私の質問とは関係ありません。
Sample_Trainingを含むデータベースがあり、その中にストアドプロシージャを作成し、後でそれを削除したので、削除したストアドプロシージャを取得したいと思います。
私は会社の従業員なので、管理者権限がありません
DECLARE @Date_From DATETIME = '2015-01-02'
DECLARE @Date_To DATETIME = '2015-01-05'
SELECT
CONVERT(VARCHAR(MAX), SUBSTRING([RowLog Contents 0], 33, LEN([RowLog Contents 0]))) AS [Script]
FROM
fn_dblog(NULL,NULL)
WHERE
[Operation] = 'LOP_DELETE_ROWS'
AND [Context] = 'LCX_MARK_AS_GHOST'
AND [AllocUnitName] = 'sys.sysobjvalues.clst'
AND [TRANSACTION ID] IN (SELECT DISTINCT [TRANSACTION ID]
FROM sys.fn_dblog(NULL, NULL)
WHERE Context IN ('LCX_NULL') AND Operation IN ('LOP_BEGIN_XACT')
AND [Transaction Name] = 'DROPOBJ'
AND CONVERT(NVARCHAR(11), [Begin Time]) BETWEEN @Date_From AND @Date_To)
AND SUBSTRING([RowLog Contents 0], 33, LEN([RowLog Contents 0])) <> 0
上記のクエリにより、ストアドプロシージャを取得できます。次に、関数、テーブルを取得する方法について質問します。
私は私の質問に対する解決策を得ました。最初にプロシージャを作成する必要があります
CREATE PROCEDURE [dbo].[sp_Recover_Dropped_Objects]
@Database_Name NVARCHAR(MAX),
@Date_From DATETIME,
@Date_To DATETIME
AS
DECLARE @Compatibility_Level INT
SELECT @Compatibility_Level=dtb.compatibility_level
FROM master.sys.databases AS dtb WHERE dtb.name=@Database_Name
IF ISNULL(@Compatibility_Level,0)<=80
BEGIN
RAISERROR('The compatibility level should be equal to or greater SQL SERVER 2005 (90)',16,1)
RETURN
END
Select [Database Name],Convert(varchar(Max),Substring([RowLog Contents 0],33,LEN([RowLog Contents 0]))) as [Script]
from fn_dblog(NULL,NULL)
Where [Operation]='LOP_DELETE_ROWS' And [Context]='LCX_MARK_AS_GHOST'
And [AllocUnitName]='sys.sysobjvalues.clst'
AND [TRANSACTION ID] IN (SELECT DISTINCT [TRANSACTION ID] FROM sys.fn_dblog(NULL, NULL)
WHERE Context IN ('LCX_NULL') AND Operation in ('LOP_BEGIN_XACT')
And [Transaction Name]='DROPOBJ'
And CONVERT(NVARCHAR(11),[Begin Time]) BETWEEN @Date_From AND @Date_To)
And Substring([RowLog Contents 0],33,LEN([RowLog Contents 0]))<>0
以下の手順で実行してください。
EXEC sp_Recover_Dropped_Objects 'Sample_Training','2015/12/24','2015/01/07'