gpt4 book ai didi

sql-server - sql server中保存其他错误信息的方法

转载 作者:行者123 更新时间:2023-12-02 18:48:17 25 4
gpt4 key购买 nike

我只想将此错误消息保存在数据库中

所以我运行这个脚本

BEGIN TRY
RESTORE HEADERONLY FROM DISK =
'C:\ZZ_SQLBACKUP\DBABackupTracer_20181107_230PM_F_2.BAK'
END TRY
BEGIN CATCH
SELECT
ERROR_NUMBER() AS ErrorNumber
,ERROR_SEVERITY() AS ErrorSeverity
,ERROR_STATE() AS ErrorState
,ERROR_LINE () AS ErrorLine
,ERROR_PROCEDURE() AS ErrorProcedure
,ERROR_MESSAGE() AS ErrorMessage;
END CATCH

所以查询给了我这个结果

但是错误信息“设备‘C:\ZZ_SQLBACKUP\DBABackupTracer_20181107_230PM_F_2.BAK’上的卷为空。”未包含在列内

有办法保存这句话吗?

提前谢谢您:)

最佳答案

有一种方法可以编写脚本,但它有点不传统,并且您需要管理员权限才能运行dbcc命令。您不能使用 try..catch block ,因为您要捕获的错误是仅限客户端的消息。因此,必须将消息发送回客户端。然后,您可以提取发送到客户端的最后一个输出,并将其放置在表中的某处进行分析。例如:

RESTORE HEADERONLY FROM DISK = 'C:\ZZ_SQLBACKUP\DBABackupTracer_20181107_230PM_F_2.BAK'
if @@error = 3013
begin
declare @tbl table (err_msg nvarchar(max))

insert into @tbl
execute ('dbcc outputbuffer(@@spid)')

select top 50 * from @tbl
end

如果备份失败,则捕获输出缓冲区并将其发送到表。否则输出缓冲区将被忽略。我添加了 select top 50 * from @tbl 这样你就可以看到输出缓冲区是如何格式化的。它并不漂亮,但它确实包含了错误的全文。

如果您想将错误保存在永久表中,您可能还需要其他列,以便您可以仅提取最近错误的数据。将 select top 50 * from @tbl 更改为:

insert into your_error_log_table (row_id, database_name, error_date, error_msg)
select row_number() over (order by (select 1)), 'your db name', getdate(), err_msg
from @tbl

另一个解决方案是编写备份脚本,从命令提示符或 Power Shell 运行,并将输出通过管道/捕获到日志文件。这肯定会使错误消息更具可读性。

关于sql-server - sql server中保存其他错误信息的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53185427/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com