第 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';
Run Code Online (Sandbox Code Playgroud)
第 2 步:在满足条件时在 Job 内部引发错误
RAISERROR(50001, 10,1,@freespacePct, @dbname,@drive) with LOG;
Run Code Online (Sandbox Code Playgroud)
我想在错误消息中看到 FreespacePCt、数据库名称和驱动器详细信息。
但是当我查看引发的错误时,我只看到了我在sp_addmessage
. 如何记录其他详细信息?
我看到的消息:
错误 50001,严重性 10,状态 1 已引发,请检查 mdf 文件。
您需要向 @msgtext 添加一些参数,以便 SQL 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';
Run Code Online (Sandbox Code Playgroud)
然后,你会提出它......
declare @freespacePct int = 45
,@dbname sysname = 'MYDB'
,@drive varchar(16) = 'F:/'
RAISERROR(50001, 10,1,@freespacePct, @dbname,@drive) with LOG;
Run Code Online (Sandbox Code Playgroud)
那将返回:
错误 50001,严重性 10,状态 1 已引发,请检查 mdf 文件。位于 F:/ 上的 MYDB 的可用空间为 45%
该%s
用于字符串,%d
用于符号整数。您可以在RAISERROR
文档中找到所有类型规范。
Type specification Represents
d or i Signed integer
o Unsigned octal
s String
u Unsigned integer
x or X Unsigned hexadecimal
Run Code Online (Sandbox Code Playgroud)
这些类型规范基于最初为C 标准库中的printf函数定义的类型规范。RAISERROR 消息字符串中使用的类型规范映射到 Transact-SQL 数据类型,而 printf 中使用的规范映射到 C 语言数据类型。当 Transact-SQL 没有与关联的 C 数据类型类似的数据类型时,RAISERROR 不支持 printf 中使用的类型规范。例如,RAISERROR 不支持指针的 %p 规范,因为 Transact-SQL 没有指针数据类型。
归档时间: |
|
查看次数: |
607 次 |
最近记录: |