【发布时间】: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