给定一个CustomerInvoiceId,这个函数应该返回一串连接的项目号。但是,我不明白为什么它只返回一个逗号,我想也许是因为它只执行一次。为什么tsql函数中的循环只执行一次?
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
然而,当我删除功能只保留了语句中,并与PRINT @strProjectNumber
更换RETURN @strProjectNumber
的确定指标,它的工作原理。任何理由?
感谢您的帮助
将您的RETURNS行从“RETURNS VARCHAR”更改为“RETURNS VARCHAR(8000)” –
非常感谢。这就是答案。但你评论而不是写一个答案。 – Richard77