we spend lot of time trying to look at log files when we run any particular SQl files have a standard frame work to collect these errors and store in table, amkes the application management simple at same time provides some insights into exceptions over the time
IF EXISTS (SELECT 1 FROM sys.tables WHERE name = 'wm_ErrorLog')
DROP TABLE [wm_ErrorLog]
IF EXISTS (SELECT * FROM sys.objects WHERE name = 'WMSp_ErrorLog_Ins_Error' AND type ='P')
DROP PROCEDURE [WMSp_ErrorLog_Ins_Error]
CREATE TABLE [wm_ErrorLog] (
[Error_id] INT IDENTITY(1,1)
,[Error_Number] [INT] NOT NULL
,[Error_procedure] VARCHAR(max) NOT NULL
,[Error_Message] [VARCHAR](MAX) NULL
,[Error_Line] INT
,[Error_State] INT
,[Error_Severity] INT
,[SPID] [INT] NULL
,[Program_Name] [VARCHAR](255) NULL
,[Client_Address] [VARCHAR](255) NULL
,[Authentication] [VARCHAR](50) NULL
,[Error_User_Application] [VARCHAR](100) NULL
,[Error_Date] [DATETIME] NULL
,[Error_User_System] [sysname] NOT NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO
SET ANSI_PADDING OFF
GO
ALTER TABLE wm_ErrorLog ADD CONSTRAINT [dfltErrorLog_error_date] DEFAULT(GETDATE())
FOR [Error_Date]
GO
ALTER TABLE wm_ErrorLog ADD CONSTRAINT [dfltErrorLog_error_user_system] DEFAULT(SUSER_SNAME())
FOR [Error_User_System]
GO
ALTER TABLE [wm_ErrorLog] ADD CONSTRAINT wmpk_wm_errorlog_id PRIMARY KEY (error_id)
GO
Create PROCEDURE [WMSp_ErrorLog_Ins_Error] (
@Error_Number INT = NULL
,@Error_procedure SYSNAME = 'Ad hoc sql'
,@Error_Message VARCHAR(4000) = NULL
,@UserID INT = NULL
)
AS
BEGIN
BEGIN TRY
INSERT INTO wm_ErrorLog (
[Error_Number]
,[Error_procedure]
,[Error_Message]
,[Error_line]
,[Error_state]
,[Error_severity]
,[SPID]
,[Program_Name]
,[Client_Address]
,[Authentication]
,[Error_User_System]
,[Error_User_Application]
)
SELECT [Error_Number] = ISNULL(@Error_Number, ERROR_NUMBER())
,[Error_procedure] = COALESCE(ERROR_PROCEDURE(),@Error_procedure)
,[Error_Message] = ISNULL(@Error_Message, ERROR_MESSAGE())
,[Error_line] = ERROR_LINE()
,[Error_state] =ERROR_STATE()
,[Error_severity] = ERROR_SEVERITY()
,[SPID] = @@SPID
,[Program_Name] = ses.program_name
,[Client_Address] = con.client_net_address
,[Authentication] = con.auth_scheme
,[Error_User_System] = SUSER_SNAME()
,[Error_User_Application] = @UserID
FROM sys.dm_exec_sessions ses
LEFT JOIN sys.dm_exec_connections con ON con.session_id = ses.session_id
WHERE ses.session_id= @@SPID
END TRY
BEGIN CATCH
-- We even failed at the log entry so let's get basic
INSERT INTO wm_ErrorLog (
ERROR_NUMBER
,ERROR_procedure
,ERROR_MESSAGE
)
VALUES (
- 100
,OBJECT_NAME(@@PROCID)
,ERROR_MESSAGE()
)
END CATCH
END
GO
Above scripts creates two objects a table and procedure
Here is how we should plan to use
BEGIN TRY
RAISERROR(‘error’,16,1)
END TRY
BEGIN CATCH
EXECUTE [WMSp_ErrorLog_Ins_Error]
END CATCH
SELECT * FROM wm_errorlog
