2011-08-11 46 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