我希望你能帮助我解决这个问题,我总是在这个网站上得到很好的答案,所以这次我带来了一个奇怪的东西,我在SQL脚本上找到了,我将解释: 我打算从查询中累积一个列的整个valor,当我单独运行脚本时它工作正常,但每当我尝试在函数或存储过程中使用相同的脚本时,我的变量获得最后一个的valor记录。 这是我的剧本:
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]'
正如你所看到的,我只得到最后一项(在最后一行)我尝试使用商店程序,结果是一样的,你知道为什么会这样吗? 谢谢!