Sql Server中是否有类似printf的函数?我希望具有与RAISERROR函数相同的功能,但不是抛出错误或打印消息,而是将其写入varchar中,因为ERP不允许我处理错误消息。
这就是SQL Server 2000。
RAISERROR的实际工作示例:
declare @name varchar(10)
set @name = 'George'
RAISERROR ('Hello %s.', 10, 1, 'George')
打印Hello George
我在寻找:
declare @name varchar(10), @message varchar(50)
set @name = 'George'
SET @message = printf('Hello %s.', 'George')
return @message
这将返回Hello George
5条答案
按热度按时间tyg4sfes1#
PRINT
就是严重性为0的RAISERROR
。因此,您可以使用。编辑以将其存储到可以使用
xp_sprintf
扩展存储过程的变量中。ukdjmx9f2#
如果格式字符串的数量有限,并且能够将它们添加到sysmessages(通过sp_addmessage),则可以使用FORMATMESSAGE:
与RAISERROR语句类似,FORMATMESSAGE通过用提供的参数值替换消息中的占位符变量来编辑消息。有关错误消息中允许的占位符和编辑过程的详细信息,请参阅RAISERROR。
以下是适用于SQL Server 2005或更高版本的有效答案,但遗憾的是,OP正在寻找适用于SQL Server 2000的解决方案:
它很丑,是Try/Catch和
RAISERROR
的滥用:dnph8jn43#
自SQL Server 2016起,
formatmessage
和raiserror
已被扩展,使它们几乎完全像C的printf
函数一样工作。第一个参数(以前必须是一个整数,引用sys.messages
中的预定义消息)现在可以是printf
样式的格式字符串:虽然
throw
并不隐式支持这种格式,但是可以将formatmessage
与以下构造一起使用:rlcwz9us4#
下面是一个使用sql_variant数据类型的简单printf过程。不幸的是,它只适用于SQL Server 2008及更高版本。
下面是示例调用:
csga3l585#
如果你想在一个变量中存储一些信息,那么SET应该足够你处理了吧?除非我对这个问题不清楚。