Sql server 为什么tsql函数中的循环只执行一次?
给定CustomerInvoiceId,此函数应返回一个串联的项目编号字符串。但是,我不明白为什么它只返回一个逗号,我想可能是因为它只执行一次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,
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