您好,我是小DAI,专注于数据库管理员相关的技术问答,请问有什么可以帮您?

sp_addmessage

说明

将用户定义的消息添加到 sysusermessages,以供存储过程 print 和 raiserror 调用使用,以及供 sp_bindmsg 使用。

语法


sp_addmessage <message_num>, <message_text> 
	[,<language>[, <with_log>[, replace]]]
	

参数

message_num

是要添加的消息的消息号。用户定义的消息的消息号必须大于等于 20000。

message_text

是要添加的消息的文本。最大长度为 1024 个字节。

language>

是要添加的消息的语言。这必须是 syslanguages 表中有效的语言名称。如果缺少此参数,SAP ASE 服务器便假定这些消息使用 @@langid 指定的缺省会话语言。

with_log>

指定如果启用了记录,是否在 SAP ASE 服务器错误日志以及 Windows 服务器上的 Windows 事件日志中记录消息。有效值包括:

  • TRUE – 不管错误的严重性如何,都将记录消息

  • FALSE – 是否记录消息取决于错误的严重性。

    如果未指定 <with_log> 的值,则缺省值为 FALSE。

    replace

    指定是否覆盖具有相同编号和 <languid> 的现有消息。如果指定了 replace,则将覆盖现有消息;如果省略了 replace,则不覆盖现有消息。如果未指定 replace 的值,则该参数的缺省行为指定不覆盖现有消息。

    示例

    示例 1

    将编号为 20001 的消息添加到 sysusermessages:

    
    sp_addmessage 20001, "The table '%1!' is not owned by the user '%2!'."
    

    示例 2

    将编号为 20002 的消息添加到 sysusermessages:如果启用了事件记录,则将在 SAP ASE 服务器错误日志以及 Window 服务器上的 Windows 事件日志中记录此消息。如果编号为 20002 的消息使用缺省会话语言,则此消息将覆盖以前的消息:

    
    sp_addmessage 20002, "The procedure'%1!' is not owned
    by the user '%2!'.", NULL, TRUE, "replace"
    

    用法

    除非您指定 @replace = "replace",否则 sp_addmessage 不覆盖具有相同编号和 <langid> 的现有消息。

    print 和 raiserror 识别要输出的消息文本中的占位符。一条消息可以按任何顺序包含多达 20 个不同的占位符。将消息文本发送到客户端时,消息后面的任何参数的格式化内容将替换这些占位符。

    为实现在 SAP ASE 服务器将消息翻译为具有不同语法结构的语言时可以对参数进行重新排序,需要对占位符进行编号。参数的占位符显示为“%<nn>!”,即一个百分比符号(%)后跟一个从 1 到 20 的整数,然后跟感叹号(!)。整数表示参数列表中字符串中的参数编号。“%1!”是原始版本中的第一个参数,“%2!”是第二个参数,依此类推。

    只有创建消息的用户才能执行带 replace 选项的 sp_addmessage 来替换该原始消息。