【发布时间】:2023-10-30 14:10:01
【问题描述】:
我正在使用 SQL Server 2016 并使用 NESTED WHILE LOOPS 在杂草中迷路。
在 INNER WHILE LOOP 中,我正在填充一个包含 PolicyNo 和 ClaimNo 的 TEMP 表 (#tempClaimRecordsForInsert)。有 773 条记录。 TEMP 表可以正确填充,没有问题。
问题出在 OUTER WHILE LOOP 中,我试图填充另一个 TEMP 表,我试图从内部循环中创建的临时表(有 16 个 UserSysID 记录)中向每个 UserSysID 添加 773 个声明。我没有在 TEMP 表 (#tempRecordsForInsert) 中获得所有记录的任何记录。
任何帮助/方向将不胜感激。谢谢。
这是我的 SQL 代码:
DECLARE @counterUserID int = 1;
DECLARE @counterClaims int = 1;
CREATE TABLE #tempClaimRecordsForInsert (
PolicyNo varchar(10)
, ClaimNo varchar(6)
);
CREATE TABLE #tempRecordsForInsert (
ReinsuranceAuditSysID int
, PolicyNo varchar(10)
, ClaimNo varchar(6)
)
WHILE @counterUserID <= (SELECT COUNT(*) FROM #tempAuditorUserIdList)
BEGIN
DECLARE @UserSysID int = (SELECT l.UserSysID FROM #tempAuditorUserIdList l WHERE l.RN = @counterUserID);
WHILE @counterClaims <= (SELECT COUNT(*) FROM #ClaimNo)
BEGIN
DECLARE @RN1 int = (SELECT c.RN FROM #ClaimNo c WHERE c.RN = @counterClaims);
INSERT INTO #tempClaimRecordsForInsert
SELECT c.PolicyNo, c.ClaimNo --, x.RN
FROM dbo.CMS_Claims c
INNER JOIN #ClaimNo x
ON c.ClaimNo = x.ClaimNo
WHERE x.RN = @RN1;
SET @counterClaims = (@counterClaims + 1)
END
INSERT INTO #tempRecordsForInsert
SELECT @UserSysID as ReinsuranceAuditSysID, i.ClaimNo, i.PolicyNo
FROM #tempClaimRecordsForInsert i
WHERE @UserSysID = @counterUserID
SET @counterUserID = (@counterUserID + 1)
END
SELECT * FROM #tempClaimRecordsForInsert;
DROP TABLE #tempClaimRecordsForInsert;
SELECT * FROM #tempRecordsForInsert;
DROP TABLE #tempRecordsForInsert;
【问题讨论】:
-
在#tempClaimRecordsForInsert 中您只插入PolicyNo 和ClaimNo,但您可能需要UserSysID 与外部插入条件中的@countUserID 进行比较
-
杰维,谢谢。我会试试看。谢谢
-
我的意思是你需要在 #tempClaimRecordsForInsert 中的一些东西来与外部插入条件下的计数器进行比较,可能 UserSysID 是正确的
标签: tsql while-loop