【发布时间】:2017-11-30 23:18:05
【问题描述】:
我有以下 sql 代码,但它的行为不符合预期。它似乎返回了两个不同的数据集(不确定数据集是否是正确的解释),每个数据集都有一条记录,而不是一个数据集有两条记录。
我的 sql 应该读取带有国家和跟踪号的表。如果我找到我要查询的国家/地区,我会将跟踪号返回给光标。在我的示例中,我的光标中有两个跟踪号码。然后,我遍历 sql 以从多个表中获取信息,并将结果放入该跟踪号的一条记录中(该部分有效)。第二次它对第二个跟踪号做同样的事情,只是它似乎将第二个记录放在它自己的数据集中。我期待有两个记录的一个结果,但它似乎是两个独立的结果。有人可以帮助解释并提供可能的指导吗?
这是我的 sql
DECLARE @cur_trk_link VARCHAR(50)
--Declare Cursor
DECLARE Student_Cursor CURSOR FOR
--Select trk_link from cc_ptms for passed CC
SELECT trk_link FROM CC_PTMS WHERE cc = 'JA'
--opne cursor
OPEN Student_Cursor
--Fetch from Cursor
FETCH NEXT FROM Student_Cursor INTO @cur_trk_link
WHILE @@FETCH_STATUS = 0
BEGIN
--execute main function to create records
SELECT Top 1 t.trk_link
,(SELECT track + ' ' + country_na FROM TT_DTL AS td WHERE td.[trk_link]=LEFT (t.[trk_link], 20)) AS TrainingTrackCountry
,t.scn
,t.given_nm AS FirstName
,t.surname_nm AS LastName
,t.cc AS CC
,t.sex AS Sex
,t.grade AS Grade
,t.dob AS StudentDob
,t.marital_st AS MaritalStatus
,t.pob_cntry AS BirthCountry
,t.pob_city AS BirthCity
,CASE t.UScitizenship_CD
WHEN 'H' THEN 'Holds'
WHEN 'DNH' THEN 'Does Not Hold'
ELSE ''
END AS StuCitizenStatus
,p.pass_nbr as Passport#
,STUFF((SELECT ', ' + pass_nbr FROM VI AS v WHERE v.[trk_link]=t.[trk_link] FOR XML PATH('')),1 ,1 ,'') AS Visa#
,STUFF((SELECT ', ' + given_nm+' '+ surname_nm FROM PD AS p2 where p2.[trk_link]=t.[trk_link] FOR XML PATH('')),1 ,1 ,'') AS DependentName
,STUFF((SELECT ', ' + dep_rel FROM PD AS p2 WHERE p2.[trk_link]=t.[trk_link] FOR XML PATH('')),1 ,1 ,'') AS DependentRelationship
,STUFF((SELECT ', ' + Convert(VARCHAR, birth_dt) FROM PD AS p2 where p2.[trk_link]=t.[trk_link] FOR XML PATH('')),1 ,1 ,'') AS DependentDob
,STUFF((SELECT ', ' + CASE UScitizenship_CD WHEN 'H' THEN 'Holds'
WHEN 'DNH' THEN 'Does Not Hold'
ELSE ''
END FROM PD AS p2 WHERE p2.[trk_link]=t.[trk_link] FOR XML PATH('')),1 ,1 ,'') AS DepCitizenStatus
from TP t
Left outer join P p
on t.[trk_link] = p.[trk_link]
Left outer join PD p2 on t.[trk_link] = p2.[trk_link]
WHERE t.trk_link = @cur_trk_link
FETCH NEXT FROM Student_Cursor INTO @cur_trk_link
END
CLOSE Student_Cursor
DEALLOCATE Student_Cursor'
有人可以帮忙吗?谢谢佩内洛普
[结果示例]
【问题讨论】:
标签: sql-server cursor