1

我希望你能帮我解决这个问题,我总是在这个网站上得到很好的答案,所以这次我带来了我在 SQL 脚本上发现的一个奇怪的东西,我会解释一下:我打算积累查询中的一列,当我单独运行脚本时,它可以完美运行,但是每当我尝试在函数或存储过程中使用相同的脚本时,我的变量都会获得最后一条记录的值。这是我的脚本:

DECLARE @loSetTable TABLE (members VARCHAR(MAX), sorter INT) 
declare @lsEnlarge varchar(max)
set @lsEnlarge=''
SELECT @lsEnlarge=@lsEnlarge +'[menu_item].[h].&[' + rtrim(item_id) + '],' 
FROM cat_objective_item m1 
INNER JOIN cat_menu_item m2 ON (m1.item_id = m2.menu_item_id     AND m2.db_id = 2) 
WHERE objective_id IN (6) 
ORDER BY objective_id,item_id
set @lsEnlarge = substring(@lsEnlarge,1,len(@lsEnlarge)-1)
INSERT INTO @loSetTable VALUES ('SET itemgroup1 AS ''' +  @lsEnlarge  + ' ''  ' ,1)
SELECT * FROM @loSetTable

输出很好:

SET itemgroup1 AS '[menu_item].[h].&[013388],[menu_item].[h].&[015783],[menu_item].[h].&[016049],[menu_item].[h].&[016097],[menu_item].[h].&[016464],[menu_item].[h].&[017802],[menu_item].[h].&[018255],[menu_item].[h].&[018282],[menu_item].[h].&[10150],[menu_item].[h].&[10151] '

但是当我把 SAME 脚本放在一个函数中时:

ALTER FUNCTION [dbo].[mk_mmx_fn_get_kfc_mdx_members] ()            
RETURNS @loSetTable TABLE (members VARCHAR(MAX), sorter INT)            
AS
BEGIN
DECLARE @lsEnlarge AS    VARCHAR(MAX)
SET @lsEnlarge=''

--First group of items
SELECT @lsEnlarge=@lsEnlarge +'[menu_item].[h].&[' + rtrim(item_id) + '],' 
FROM cat_objective_item m1 
INNER JOINcat_menu_item m2 ON (m1.item_id = m2.menu_item_id AND m2.db_id = 2) 
WHERE objective_id IN (6) 
ORDER BY objective_id,item_id
set @lsEnlarge = substring(@lsEnlarge,1,len(@lsEnlarge)-1)
INSERT INTO @loSetTable VALUES ('SET itemgroup1 AS ''' +  @lsEnlarge  + '''' ,1)
RETURN
END

我得到这个:

SET itemgroup1 AS '[menu_item].[h].&[10151]'

正如你所看到的,我只得到最后一项(在最后一行)我尝试使用存储过程,结果是一样的,你知道为什么会这样吗?谢谢!

4

0 回答 0