试图理解标量函数的作用
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)