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

Sql server 在SSMS(SQL Server Management Studio)中,调试器显示子字符串的问号';从函数调用时的返回值,sql-server,Sql Server,在SSMS(SQLServerManagementStudio)中,当从函数调用时,调试器将对子字符串的返回值显示问号 我有一个关于这两行的问题 SELECT SUBSTRING(N'אאא',1,1); SELECT dbo.testsubstring5(N'א'); 我在第一个上设置了一个断点,然后点击debug 正如您所看到的,到目前为止,子字符串工作正常。这就是函数调用之外的时间 现在,当我们进入dbo.testsubstring5内部时,由于某种原因,SUBSTRING不会在调试

在SSMS(SQLServerManagementStudio)中,当从函数调用时,调试器将对子字符串的返回值显示问号

我有一个关于这两行的问题

SELECT  SUBSTRING(N'אאא',1,1);
SELECT dbo.testsubstring5(N'א');
我在第一个上设置了一个断点,然后点击debug

正如您所看到的,到目前为止,子字符串工作正常。这就是函数调用之外的时间

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

查看下图中调试器的监视窗口

注意问题,那就是

子字符串(@str,1,1)
失败,它给出的结果是

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

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


因此,对于substring,当在函数中调用substring时,调试器窗口似乎存在问题。我一定是遗漏了什么,但我不知道是什么。

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

编辑了投票否决者的结果图片

调试时会出现监视窗口

打印为文本时的结果


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

我看不到任何关于
testsubstring5
应该做什么的描述。@Larnu有几行子字符串,您指的是哪一行?我没有一个数字列表。我不知道你为什么说连接,我没有连接。Substring接受一个字符串和两个数字@TimBiegeleisen TestSubstring 5你可以看到它的所有行,它只是在做一些赋值,我在查看watch/debug窗口中表达式的值,它的目的只是为我提供材料来交叉检查watch/debug窗口是否给出了正确的结果,对于我在问题中提到的情况,watch/debug窗口并没有这样做。当你说我在引号外有一个字符串时,我想你会感到困惑,
N'אאא
不是引号外的文字字符串。在包含unicode字符的文本字符串之前写入N是指定unicode的方式。例如,请参阅答案@Larnu-我怀疑这里有一些unicode/RTL破坏。如果将此处显示的代码C&P到SSMS窗口中,字符串和数字将重新组合到正确的
子字符串
调用中。我没有看到“打印输出到文本(Ctrl+t)”选项。它在什么菜单中?@barlop
Query
->
结果到
->
结果到文本(Ctrl+t)
@Larnu谢谢。。我刚试过。。但是我正在调试函数testsubstring5,如果我把它放在里面,那么我会得到错误“在函数中无效地使用了一个有副作用的操作符‘PRINT’。”