试图理解标量函数的作用

Posted

技术标签:

【中文标题】试图理解标量函数的作用【英文标题】:Trying to understanding what a SCALAR FUNCTION does 【发布时间】:2019-06-13 10:11:39 【问题描述】:

我的任务是记录我们数据库中的存储过程和函数,我遇到了一个我不确定它实际上在做什么的任务。

通过查看和谷歌搜索部分代码,我相信它正在获取一个 XML 字符串,该字符串被传递给函数并将其与 ID 号合并。但是我不确定这是否正确

ALTER FUNCTION [dbo].[GetMergeItem]
(
@MergeData xml,
@MergeItemId nvarchar(max)
)
RETURNS nvarchar(max)
AS
BEGIN
DECLARE @MergeItemText nvarchar(max)

SELECT @MergeItemText = @MergeData.value('(/ArrayOfMergeFieldJson/MergeFieldJson[Id/text()=sql:variable("@MergeItemId")]/Text/text())[1]', 'nvarchar(max)') 
RETURN @MergeItemText
END

谁能告诉我我认为它的做法是否正确,如果不解释它实际上在做什么?

【问题讨论】:

它在 XML 中查找一个元素并返回它的值。原始 XML 未更改。 【参考方案1】:

这是我认为引起你困惑的一点。

SELECT @MergeItemText = @MergeData.value('(/ArrayOfMergeFieldJson/MergeFieldJson[Id/text()=sql:variable("@MergeItemId")]/Text/text())[1]', 'nvarchar(max)') 

这里发生的是 .value 方法返回单个值(因此是标量)。

括号的第一部分使用 xpath 查询导航到 xml 结构中的相关节点。部分向下看起来 MergeFieldJson 节点中有多个属性,因此它以方括号开头,表示要在此处指定位置。然后,代码在其中使用传入的 id 值说明要使用的位置(1 是第一个位置)以继续从中进行路径。然后 xpath 从那里继续 2 个其他节点并返回在 /text 节点中找到的第一个值。

然后该函数将值作为 nvarchar(max) 返回。

【讨论】:

非常感谢您的回答,非常有帮助!【参考方案2】:

它使用 .value() xml 数据类型方法并查找与 @MergeItemId 匹配的元素并返回一个标量值。 了解更多详情 .value()

【讨论】:

以上是关于试图理解标量函数的作用的主要内容,如果未能解决你的问题,请参考以下文章

彻底理解 softmax、sigmoid、交叉熵(cross-entropy)

PCB MS SQL CLR聚合函数(函数作用,调用顺序,调用次数) CLR说明

怎么通俗地理解张量

线性代数中的各种量理解:标量向量矩阵张量

PHP很难理解这个功能[关闭]

深入理解C++ 虚函数表