SQL Server 的 printf
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
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
PRINT
只是RAISERROR
,严重性为 0。所以你可以使用。编辑以将其存储到变量中,您可以使用
xp_sprintf
扩展存储过程。PRINT
is justRAISERROR
with a severity of 0. So you can use.Edit to store it into a variable you can use the
xp_sprintf
extended stored procedure.如果您的格式字符串数量有限,并且能够将它们添加到 sysmessages(通过 sp_addmessage),您可以使用 FORMATMESSAGE:
下面是 SQL Server 2005 或更高版本的有效答案,但不幸的是,OP 正在寻找 SQL Server 2000 的解决方案:
它很丑陋,并且滥用 Try/Catch 和 RAISERROR :
If you have a limited number of format strings, and are able to add them to sysmessages (via sp_addmessage), you can use FORMATMESSAGE:
The below would be a valid answer for SQL Server 2005 or later, but unfortunately, the OP is seeking a solution for SQL Server 2000:
It's ugly, and an abuse of Try/Catch and
RAISERROR
:从 SQL Server 2016 开始,
formatmessage
和raiserror
已进行扩展,使其几乎可以像 C 的printf函数。第一个参数(以前必须是引用 sys.messages 中预定义消息的整数)现在可以是 printf 样式的格式字符串
: 不隐式支持相同的格式,没有什么可以阻止您将
formatmessage
与此构造一起使用:As of SQL Server 2016,
formatmessage
andraiserror
have been extended to allow them to work almost exactly like C'sprintf
function. The first argument (that previously had to be an integer referring to a predefined message insys.messages
) can now be aprintf
-style format string:While
throw
does not implicitly support this same formatting, there is nothing stopping you from usingformatmessage
together with this construct:下面是一个使用 sql_variant 数据类型的简单 printf 过程。不幸的是,它仅适用于 SQL Server 2008 及更高版本。
以下是示例调用:
Here's a simple printf procedure using sql_variant data types. Unfortunately, it only works for SQL Server 2008 and above.
And here are sample invocations:
如果您希望在变量中存储一些消息,那么 SET 应该足以让您处理对吧?除非我不清楚这个问题。
If you are looking to store some message in a variable, then SET should be enough for you to handle right? Unless I am not clear with the question.