连接多个SQL标量值函数值

  • 本文关键字:函数 标量 SQL 连接 sql
  • 更新时间 :
  • 英文 :


我定义了以下标量值函数:

CREATE OR ALTER FUNCTION getName
(
@name NVARCHAR(200),
@deletedDate DATETIME2(7) = NULL,
@suffix NVARCHAR(50) = NULL
)
RETURNS NVARCHAR(MAX)
AS
BEGIN
RETURN QUOTENAME(CONCAT(@name, IIF(@suffix IS NOT NULL, ' ' + @suffix, ''), IIF(@deletedDate IS NOT NULL, CONCAT(' (DELETED - ', FORMAT(@deletedDate, 'dd.MM.yyyy HH:mm:ss'), ')'), '')))
END

我要做的是将其结果连接到一个变量中,如下所示:

DECLARE @Columns NVARCHAR(MAX);
SELECT @Columns = COALESCE(@Columns + ',', '') + [dbo].[getName]([Name], [DeletedDate], DEFAULT)
FROM [dbo].[Items]
WHERE [ProjectId] = 1
ORDER BY [Order] DESC;
SELECT @Columns

但是@Columns结果只具有函数的最后一个结果,如果我删除函数并进行内联计算,它会按预期工作(具有所有值)。

我不明白为什么使用这个函数时不工作。

因为我在网上找不到任何答案,如果有人需要答案,我已经设法通过中介CTE解决了这个问题:

WITH Names_CTE
AS 
(
SELECT   [dbo].[getName]([Name], [DeletedDate], DEFAULT) AS [Name], [Order]
FROM     [dbo].[ITems]
WHERE    [ProjectId] = 1
ORDER BY [Order] DESC OFFSET 0 ROWS
)
SELECT @Columns = COALESCE(@Columns + ',', '') + [Name]
FROM Names_CTE
SELECT @Columns

我认为这是行不通的,因为我们需要事先知道值来与COALESCE一起执行计算。

最新更新