我希望你能帮我解决这个问题,我总是在这个网站上得到很好的答案,所以这次我带来了我在 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]'
正如你所看到的,我只得到最后一项(在最后一行)我尝试使用存储过程,结果是一样的,你知道为什么会这样吗?谢谢!