在SQL Server 2012中,我有一個腳本多次調用存儲過程。循環將執行與[ResultHeader]表中的記錄數一樣多的次數。執行內部while循環僅第一次
EXEC [AS400].tp_SelectChildItems @Pgm, @Grp, @Pgmgrpseq,
null, null, null, null, null, @ItemSelection, null,
null, null, null, null,
注:此SP有table variable
內
我有一個逗號分隔SelectedCostPageList的列表。對於此列表中的每個值,循環都會執行一次。
我正在觀察一個奇怪的行爲。當我從腳本調用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, @[email protected]) +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'
感謝您的建議 - 我會嘗試....還有一個很棒的建議....謝謝 – Lijo