【问题标题】:Concat mutiple SQL scalar-valued function values连接多个 SQL 标量值函数值
【发布时间】:2022-12-07 23:09:28
【问题描述】:

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

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 结果只有函数的最后一个结果,如果我删除函数并进行内联计算,它会按预期工作(具有所有值)。

我不明白为什么在使用该功能时这不起作用。

【问题讨论】:

  • 您使用的是哪个数据库管理系统? (以上代码是特定于产品的。)
  • 我正在使用 MS-SQL(Azure SQL 数据库)

标签: sql


【解决方案1】:

因为我在网上找不到任何答案,如果有人需要答案,我已经设法通过中介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 一起执行计算。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多