私はいつもこのサイトで素晴らしい答えを得ることができるので、今回は 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]'
ご覧のとおり、最後のアイテム (最後の行にある) しか取得していません。ストア プロシージャを使用してみましたが、結果は同じです。なぜこれが起こっているのか知っていますか?? ありがとう!