如何将SQL执行的错误消息记录到本地文件中

发表于:2013-5-22 09:15

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:dz45693    来源:51Testing软件测试网采编

  其实大家都知道sql语句的错误信息都可以在sys.messages表里面找到

  如:

  如果在执行语句在try...catch中,我们可以通过以下方法获取错误信息。sql语句如下:

BEGIN TRY
    SELECT  3 / 0
END TRY
BEGIN CATCH
    DECLARE @errornumber INT
    DECLARE @errorseverity INT
    DECLARE @errorstate INT
    DECLARE @errormessage NVARCHAR(4000)
    SELECT  @errornumber = ERROR_NUMBER() ,
            @errorseverity = ERROR_SEVERITY() ,
            @errorstate = ERROR_STATE() ,
            @errormessage = ERROR_MESSAGE()

    SELECT  @errornumber ,
            @errorseverity ,
            @errorstate ,
            @errormessage

    RAISERROR (
             @errormessage, -- Message text,
             @errorseverity,                        -- Severity,
             @errorstate,                         -- State,
           @errornumber
          );
END CATCH
View Code

  当然我这里是故意用RAISERROR再次抛出错误信息,运行结果如下:

  现在我们来定义一个存储过程,其目的就是往本地文件中写入信息。

  sql脚本如下:

CREATE Proc [dbo].[UCreateOrAppendTextFile](@Filename VarChar(100),@Text nVarchar(4000))
AS
DECLARE @FileSystem int
DECLARE @FileHandle int
DECLARE @RetCode int
DECLARE @RetVal int
DECLARE @CreateOrAppend int


EXECUTE @RetCode = sp_OACreate 'Scripting.FileSystemObject' , @FileSystem OUTPUT
IF (@@ERROR|@RetCode > 0 Or @FileSystem < 0)
RAISERROR ('could not create FileSystemObject',16,1)

EXECUTE @RetCode = sp_OAMethod @FileSystem , 'FileExists', @RetVal out, @FileName
IF (@@ERROR|@RetCode > 0)
RAISERROR ('could not check file existence',16,1)
-- If file exists then append else create
SET @CreateOrAppend = case @RetVal when 1 then 8 else 2 end
EXECUTE @RetCode = sp_OAMethod @FileSystem , 'OpenTextFile' , @FileHandle OUTPUT , @Filename, @CreateOrAppend, 1
IF (@@ERROR|@RetCode > 0 Or @FileHandle < 0)
RAISERROR ('could not create File',16,1)

EXECUTE @RetCode = sp_OAMethod @FileHandle , 'WriteLine' , NULL , @text
IF (@@ERROR|@RetCode > 0 )
RAISERROR ('could not write to File',16,1)

EXECUTE @RetCode = sp_OAMethod @FileHandle , 'Close'
IF (@@ERROR|@RetCode > 0)
RAISERROR ('Could not close file ',16,1)

EXEC sp_OADestroy @filehandle
IF (@@ERROR|@RetCode > 0)
RAISERROR ('Could not destroy file object',16,1)

EXEC sp_OADestroy @FileSystem
----------------------------------------

31/3123>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号