步骤1:我在sys.messages中创建了一个自定义错误消息
EXEC sp_addmessage
@msgnum = 50001,
@severity = 10,
@msgtext =
N'Error 50001, severity 10, state 1 was raised, Please check mdf file.' ,
@lang = 'us_english',
@replace='REPLACE';步骤2:在作业内部,当满足条件时,我正在提高错误
RAISERROR(50001, 10,1,@freespacePct, @dbname,@drive) with LOG;我希望在错误消息中看到FreespacePCt、数据库名和驱动器详细信息。
但是,当我看到引起的错误时,我只是看到了我在sp_addmessage中声明的内容。我如何记录其他细节?
我看到的信息:
错误50001,严重性10,状态1被引发,请检查mdf文件。
发布于 2019-10-11 20:25:19
您需要向@msgtext添加一些参数,以便Server知道您将数据放在何处。差不多是这样的:
EXEC sp_addmessage
@msgnum = 50001,
@severity = 10,
@msgtext =
N'Error 50001, severity 10, state 1 was raised, Please check mdf file. The freespace is %d percent for %s residing on %s' ,
@lang = 'us_english',
@replace='REPLACE';然后,你会把它.
declare @freespacePct int = 45
,@dbname sysname = 'MYDB'
,@drive varchar(16) = 'F:/'
RAISERROR(50001, 10,1,@freespacePct, @dbname,@drive) with LOG;这将返回:
错误50001,严重性10,状态1被引发,请检查mdf文件。对于居住在F:/
%s用于字符串,%d用于有符号整数。您可以在RAISERROR 文档中找到所有类型规范。
Type specification Represents
d or i Signed integer
o Unsigned octal
s String
u Unsigned integer
x or X Unsigned hexadecimal这些类型规范基于C标准库中最初为printf函数定义的规范。RAISERROR消息字符串中使用的类型规范映射为Transact-SQL数据类型,而printf中使用的规范映射为C语言数据类型。当Transact-SQL没有类似于关联的C数据类型的数据类型时,RAISERROR不支持printf中使用的类型规范。例如,RAISERROR不支持指针的%p规范,因为Transact-SQL没有指针数据类型。
https://dba.stackexchange.com/questions/250881
复制相似问题