Sql server 为什么tsql函数中的循环只执行一次?

Sql server 为什么tsql函数中的循环只执行一次?,sql-server,function,tsql,Sql Server,Function,Tsql,给定CustomerInvoiceId,此函数应返回一个串联的项目编号字符串。但是,我不明白为什么它只返回一个逗号,我想可能是因为它只执行一次 ALTER FUNCTION [dbo].[ConcatProductNumbers] ( @CustomerInvoiceId INT = 0 ) RETURNS VARCHAR AS BEGIN -- Declare the return variable here DECLARE @count INT = 0, @i INT = 1,

给定CustomerInvoiceId,此函数应返回一个串联的项目编号字符串。但是,我不明白为什么它只返回一个逗号,我想可能是因为它只执行一次

ALTER FUNCTION [dbo].[ConcatProductNumbers] 
(
    @CustomerInvoiceId INT = 0
)
RETURNS VARCHAR
AS
BEGIN

-- Declare the return variable here
DECLARE @count INT = 0,
@i INT = 1,
@strProjectNumber VARCHAR(MAX) = '';
DECLARE @Ci_ProjectNumber TABLE
(
    Id INT NOT NULL IDENTITY(1, 1),
    ProjectNumber VARCHAR(50) 
)

-- Add the T-SQL statements to compute the return value here

INSERT INTO @Ci_ProjectNumber (ProjectNumber)
SELECT pa.ProjectNumber
FROM ProjectsActive pa
JOIN ProjectsActiveInvoicing pai
ON pa.OrderID = pai.OrderID
WHERE pai.CustomerInvoiceId = @CustomerInvoiceId;

SELECT @count = COUNT(*) FROM @Ci_ProjectNumber

WHILE @count > @i
    BEGIN
        SELECT @strProjectNumber = (@strProjectNumber + ', ' + ci.ProjectNumber)
        FROM @Ci_ProjectNumber ci
        WHERE ci.Id = @i;    

        SET @i = @i + 1;
    END

-- Return the result of the function    
RETURN @strProjectNumber 

END
但是,当我删除函数的定义时,只保留内部的语句,并将
RETURN@strProjectNumber
替换为
PRINT@strProjectNumber
,它就可以工作了。有什么原因吗


谢谢帮助< /p> 如果目标是得到一个逗号分隔的项目编号列表,你可以考虑使用<代码> CueSeCs<代码>而不是循环。

SELECT @strProjectNumber = COALESCE(@strProjectNumber+',' ,'') + ProjectNumber
FROM ProjectsActive pa
JOIN ProjectsActiveInvoicing pai
ON pa.OrderID = pai.OrderID
WHERE pai.CustomerInvoiceId = @CustomerInvoiceId;



RETURN @strProjectNumber

将您的退货行从“退货VARCHAR”改为“退货VARCHAR(8000)”非常感谢。这就是答案。但是你没有写答案,而是发表了评论。如果ProjectNumber列可以包含NULL,那么你应该在where子句中过滤它:并且ProjectNumber不为NULL