【发布时间】:2021-09-26 03:20:15
【问题描述】:
我创建了一个用户定义的string_agg 作为查询,它工作正常
我想将其转换为标量函数,但返回的结果不一样。
我的查询
SELECT
STUFF(
(SELECT '-' + CAST(Namess AS VARCHAR(20)) AS [text()]
FROM TryDB
FOR XML PATH('')), 1, 1, NULL) As String_Agg2;
它返回 =>>> 1-2-3-4-5-6
标量函数
function fun_JoinEmpColumnInfo8
(
@names varchar(20)
)
returns nvarchar(20)
as
begin
return (
SELECT
STUFF(
(SELECT ',' + CAST(@names AS VARCHAR(20)) AS [text()]
FROM TryDB
FOR XML PATH('')), 1, 1, NULL)
);
end
返回:
1,1,1,1,1
3,3,3,3,3
4,4,4,4,4
5,5,5,5,5
6,6,6,6,6
我怎样才能得到与查询相同的结果
【问题讨论】:
-
CAST(Namess AS VARCHAR(20))CAST(@names AS VARCHAR(20))- 一个使用参数,一个使用列。如果它仍然导致问题,我们需要在 dbfiddle 上使用 minimal reproducible example。 -
您的第一个查询针对一组行;标量函数使用单个原子值;查看表值函数
-
你快乐吗?您的 ORDER BY 子句在哪里?你需要那个/那些
-
演员不工作我只想得到与查询相同的结果
-
(SELECT ',' + CAST(@names AS VARCHAR(20)) AS [text()] FROM TryDB FOR XML PATH('')), 1, 1, NULL)不使用来自TryDB的任何 列。它采用@names的值,并且对于TryDB中的每一行,将@names的另一个副本添加到字符串中。由于您没有透露调用函数的示例,我们不知道它应该在内部做什么。重复“与查询相同的结果”并不能使其更清晰。
标签: sql sql-server tsql user-defined-functions string-aggregation