【问题标题】:Get the same result result of my query as a scalar function获得与标量函数相同的查询结果
【发布时间】: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


【解决方案1】:

表格 -->

create table TryDB (Namess int)
insert into TryDB values (1), (2),(3),(4),(5),(6)

创建不带参数的函数。

create function fun_JoinEmpColumnInfo8()
 
returns nvarchar(20)  
as  
begin
return (
  SELECT
    STUFF(
      (SELECT '-' + CAST(namess AS VARCHAR(20)) AS [text()]
      FROM TryDB
      FOR XML PATH('')), 1, 1, NULL)
); 
end

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-02-27
    • 1970-01-01
    • 1970-01-01
    • 2017-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多