试图了解SCALAR FUNCTION的作用

时间:2019-06-13 10:11:39

标签: sql sql-server stored-procedures sql-server-2014

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

通过查看和搜索部分代码,我认为它采用的是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

任何人都可以告诉我我认为自己所做的事是否正确,是否不解释其实际所做的事情?

2 个答案:

答案 0 :(得分:1)

我认为这是引起您困惑的地方。

Person::Person(int initialAge){
        // Add some more code to run some checks on initialAge
        if(initialAge > 0){
            this.age = initialAge;
        }else{
            this.age =0;
        }

    }

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

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

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

答案 1 :(得分:0)

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