【问题标题】:T-SQL RAISERROR WITH NOWAIT Only Printing One Character Instead Of Whole StringT-SQL RAISERROR WITH NOWAIT 只打印一个字符而不是整个字符串
【发布时间】:2012-03-19 22:11:06
【问题描述】:

我有几个 T-SQL 存储过程,我使用 RAISERROR 和 0 严重性参数将进度消息打印到输出窗口。我已经在使用 WITH NOWAIT 来确保立即打印消息。

但是,无论我将什么字符串传递给 RAISERROR,只有第一个字符会打印到屏幕上。

例如:

RAISERROR('Profiles Complete', 0, 1) WITH NOWAIT

只在屏幕上打印一个“P”。

有人知道这是为什么或我该如何解决吗?

非常感谢,

马丁。

【问题讨论】:

  • 无法在此处重现它(即使有一个成功的 WAITFOR 语句,以确保我在 执行期间而不是在批处理完成时看到结果)
  • 您的错误消息是您在示例中显示的文字字符串,还是变量?您提到将字符串“传递”给 RAISERROR,这让我认为您可能声明了一个没有长度的 char 或 varchar 变量。在这种情况下,默认情况下它的长度为 1,因此您只会得到错误的第一个字母。
  • 同样无法重现。请说明您如何使用 proc,例如,您是否将错误消息字符串捕获到定义为没有长度的 varchar 的字段中?
  • Pondlife:我正在使用与示例中完全相同的文字字符串,但是,我确实尝试使用变量,并且仅打印第一个字符时发生了同样的事情。虽然,当我尝试变量时,我确实声明了它没有大小,所以我会再次尝试变量,但这次声明它的大小。

标签: tsql sql-server-2008-r2


【解决方案1】:

当变量声明为无长度的char时,长度默认为1。

DECLARE @c char
SET @c = 'Profiles Complete'
PRINT @c

输出:

P

【讨论】:

  • 非常感谢,改为使用声明长度的变量。现在一切正常!
  • SQL Server 设计人员做出明智的决定,将 1 设为 CHAR 和 VARCHAR 类型的默认长度,并静默截断分配给 CHAR 或 VARCHAR 的较长字符串。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-02-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多