【问题标题】:In SSMS (SQL Server Management Studio) debugger shows question mark for substring's return value when called from a function在 SSMS(SQL Server Management Studio)中,当从函数调用时,调试器显示子字符串返回值的问号
【发布时间】:2018-04-19 06:09:31
【问题描述】:

在 SSMS (SQL Server Management Studio) 中,调试器在从函数调用时显示子字符串返回值的问号

我对这两行有疑问

SELECT  SUBSTRING(N'אאא',1,1);
SELECT dbo.testsubstring5(N'א');

我在第一个设置断点并点击调试。

如您所见,SUBSTRING 到目前为止工作正常。那是在函数调用之外的时候。

现在,当我们进入 dbo.testsubstring5 时,由于某种原因,SUBSTRING 不会在调试器中输出正确的结果,尽管它在调试器之外仍然可以正常工作。

看下图调试器的监视窗口

注意问题,那个

SUBSTRING(@str,1,1) 失败,它给出的结果是?

正如您在那个监视窗口中看到的,UNICODE(SUBSTRING(@str,1,1)) 给出的值是 63,它是问号的 ASCII 值。

在程序中返回正确的值,例如,监视窗口显示 @zzz, @zzz1, and @zzz2 的正确值

因此,当在函数中调用子字符串时,对于子字符串,调试器窗口似乎是一个问题。虽然我不知道是什么,但我一定错过了什么。

【问题讨论】:

  • 我没有看到任何关于 testsubstring5 应该做什么的描述。
  • @Larnu 有几行子字符串,你指的是哪一行?我没有数字列表。我不知道你为什么说串联,我没有做串联。 Substring 接受一个字符串和两个数字w3schools.com/sql/func_sqlserver_substring.asp
  • @TimBiegeleisen testsubstring5 你看到了它的所有行,它只是做一些分配,我正在查看监视/调试窗口中表达式的值,它的目的只是为提供材料对于我在问题中提到的情况,我要交叉检查监视/调试窗口是否给出了正确的结果,而监视/调试窗口没有这样做。你在哪里得到?63
  • @Larnu 另外,当您说我在引号之外有一个字符串时,我认为您会感到困惑,N'אאא' 不是引号之外的文字字符串。在包含 unicode 字符的文字字符串之前写 N 是指定 unicode 的方式。参见例如答案stackoverflow.com/questions/49723210/…
  • @Larnu - 我怀疑我们这里有一些 unicode/RTL 损坏。如果您将此处显示的代码 C&P 到 SSMS 窗口中,则字符串和数字将重新组合成正确的 SUBSTRING 调用。

标签: sql-server


【解决方案1】:

SQL Server 在网格(结果或观察)中显示 UNICODE 字符时似乎存在一些问题。如果您尝试将输出打印到 TEXT (CTRL + T) 而不是调试,它应该打印正确的值。

为投票否决的人编辑了结果图像。

调试时出现观察窗口

打印到 TEXT 时的结果

似乎结果网格的问题已解决。我正在使用 SSMS 2012 版,现在没有看到这个问题。我记得在旧版本的 SSMS 中遇到过这个问题。但这仍然是调试的问题。

【讨论】:

  • 我没有看到“打印输出到文本(Ctrl+T)”选项。它在什么菜单中?
  • @barlop Query -> Results To -> Results to Text (Ctrl+t).
  • @Larnu 谢谢.. 我刚试过.. 但我正在调试函数 testsubstring5,如果我把它放在里面,那么我得到错误i.imgur.com/JyCEPq9.png“无效使用边-在函数中影响运算符 'PRINT'。"
猜你喜欢
  • 1970-01-01
  • 2017-08-22
  • 2020-05-25
  • 2018-05-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-07
  • 2012-08-11
相关资源
最近更新 更多