Elmah 是很多開發人員在 ASP.NET 進行錯誤訊息紀錄的套件
除預設儲存在 XML 檔案之外,說明文件有提供將錯誤訊息儲存到 SQL Server 的方法
以下為儲存錯誤訊息資料表物件建立語法
CREATE TABLE [dbo].[ELMAH_Error]
(
	[ErrorId]     UNIQUEIDENTIFIER NOT NULL,
	[Application] NVARCHAR(60)  COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,
	[Host]        NVARCHAR(50)  COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,
	[Type]        NVARCHAR(100) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,
	[Source]      NVARCHAR(60)  COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,
	[Message]     NVARCHAR(500) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,
	[User]        NVARCHAR(50)  COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,
	[StatusCode]  INT NOT NULL,
	[TimeUtc]     DATETIME NOT NULL,
	[Sequence]    INT IDENTITY (1, 1) NOT NULL,
	[AllXml]      NTEXT COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL 
) 
ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO
ALTER TABLE [dbo].[ELMAH_Error] WITH NOCHECK ADD 
	CONSTRAINT [PK_ELMAH_Error] PRIMARY KEY NONCLUSTERED ([ErrorId]) ON [PRIMARY] 
GO
ALTER TABLE [dbo].[ELMAH_Error] ADD 
	CONSTRAINT [DF_ELMAH_Error_ErrorId] DEFAULT (NEWID()) FOR [ErrorId]
GO
在 CREATE TABLE 語法最後有 TEXTIMAGE_ON 指令
此指令可指定 AllXml 的 NTEXT 資料儲存到不同的檔案群組
未指定該欄位時
就不會去讀取 TEXTIMAGE_ON 的指定的檔案群組內容
相較之下可減少 I/O 成本
在建議上 NTEXT 應改使用 NVARCHAR(MAX) 屬性,但還是適用 TEXTIMAGE_ON 屬性
另外在建立主索引鍵是使用 GUID 欄位進行設定
在建議上主索引鍵資料型態不應使用具有隨機屬性的 GUID 類型
但在宣告上加入了 NONCLUSTERED
此主索引鍵就變成非叢集索引的主索引鍵
可以考慮將 Sequence 欄位設定成叢集索引
因該欄位使用遞增序號具有遞增性質,故可設定成叢集索引
資料表就會變成
建立主索引鍵 (Primary-Key)
Elmah 建立之 SQL Server 資料庫物件指令碼來源
https://elmah.github.io/downloads/