SQL Server 2012 で、ストアド プロシージャを複数回呼び出すスクリプトがあります。 [ResultHeader] テーブルのレコード数だけループが実行されます。
EXEC [AS400].tp_SelectChildItems @Pgm, @Grp, @Pgmgrpseq,
null, null, null, null, null, @ItemSelection, null,
null, null, null, null,
注: この SP にはtable variable
内部があります。
SelectedCostPageList のカンマ区切りのリストがあります。このリストの値ごとに、ループが 1 回実行されます。
私は奇妙な行動を観察しています。スクリプトから sp を呼び出すと、sp が適切なレコードを返すのは初めてです。その後の呼び出しでは、ストアド プロシージャはレコードを返しません。非常に奇妙な…。コンマ区切りの文字列の順序を変更すると、最初の反復でのみ sp がレコードを返します。それ以外の場合はレコードがありません。
何が理由になると思いますか?
DECLARE @SelectedCostPageList VARCHAR(MAX)
SET @SelectedCostPageList = (SELECT (SELECT CONVERT(VARCHAR(32), A.PGM + '-'+A.GRP+'-'+A.PGMGRPSEQ) + ', ' AS [text()]
FROM dbo.[ResultHeader] A
WHERE UserId = 'U25703'
FOR XML PATH('')) AS CostPages) ResultHeader
PRINT @SelectedCostPageList
DECLARE @pos INT
DECLARE @len INT
set @pos = 0
set @len = 0
DELETE FROM ResultItems
WHILE CHARINDEX(',', @SelectedCostPageList, @pos+1)>0
BEGIN
set @len = CHARINDEX(',', @SelectedCostPageList, @pos+1) - @pos
DECLARE @SelectedCostPage VARCHAR(10)
set @SelectedCostPage = SUBSTRING(@SelectedCostPageList, @pos, @len)
set @pos = CHARINDEX(',', @SelectedCostPageList, @pos+@len) +1
PRINT @SelectedCostPage
DECLARE @Pgm AS VARCHAR (10);
DECLARE @Grp AS VARCHAR (10);
DECLARE @Pgmgrpseq AS VARCHAR (10);
SELECT @Pgm = (SELECT VALUE
FROM [AS400].[tf_SelectSplitString] (@SelectedCostPage, '-')
WHERE POSITION = 1);
PRINT @Pgm
SELECT @Grp = (SELECT VALUE
FROM [AS400].[tf_SelectSplitString] (@SelectedCostPage, '-')
WHERE POSITION = 2);
PRINT @Grp
SELECT @Pgmgrpseq = (SELECT VALUE
FROM [AS400].[tf_SelectSplitString] (@SelectedCostPage, '-')
WHERE POSITION = 3);
PRINT @Pgmgrpseq
Declare @ItemSelection as varchar(4000)
set @ItemSelection ='1116102540,1116102541';
print @ItemSelection
print 'HAI'
print @Pgmgrpseq
EXEC [AS400].tp_SelectChildItems
@Pgm, @Grp, @Pgmgrpseq,
null, null, null,
null, null, @ItemSelection, null,
null, null, null, null,
null, null, null, 1, 'U25703'
END
SELECT * FROM ResultItems
WHERE UserId = 'U25703'