2011-08-11 43 views
0
ALTER FUNCTION [dbo].[fn_DivisonCode] (@PeopleID int) 
RETURNS @temptable TABLE (Code varchar(100), ID varchar(100)) 
AS 
begin 

DECLARE @stDeptCode VARCHAR(100) 
DECLARE @peopleID VARCHAR(100) 

SELECT 
     @stDeptCode = (COALESCE(@stDeptCode + ',', '') + CAST(PPL.DeptCode AS VARCHAR(5))), 
     @peopleID = peopleID 
FROM dbo.PPL 
WHERE PeopleID = peopleID 

INSERT INTO @temptable(Code, ID) 
    VALUES(@stDeptCode, @peopleID) 

return 
end 

SELECT [dbo].[fn_DivisonCode](23415) 

当我调用该函数大于1倍的值,它应该返回2倍的值,但在这里它只返回@stDeptCod值不是@peopleID。有什么我在这里失踪?返回@表变量

谢谢

回答

2

您正在为变量选择值。一个变量一次只能保存一个值,所以当你运行你的select语句时,它可以从表中选择一个,两个或者100个值,但是只有最后一个值在语句完成后存储在变量中。相反,结合您选择和插入语句,像这样:

insert into @temptable(Code,ID) 
    SELECT (COALESCE(@stDeptCode + ',', '') + CAST(PPL.DeptCode AS VARCHAR(5))), peopleID 
    FROM dbo.PPL 
    WHERE @PeopleID = peopleID 
+0

通过调用函数这样它工作正常SELECT * FROM [DBO] [fn_DivisonCode](23415) – Kumee