enter code here
我有一个光标(腌制旧代码),如下所示:
DECLARE MYCursor CURSOR FOR
SELECT ANumber,CNumber,Login_Name,S_Date,
FROM MyTable
ORDER BY ANumber, S_Date
当我只运行SQL
时SELECT ANumber,CNumber,Login_Name,S_Date,
FROM MyTable
ORDER BY ANumber, S_Date
我按预期获得数据,顶部有较旧的日期。
当我运行游标时,我得到所有行,但是将更新的日期放在顶部。这是游标以相反的顺序返回项目。
我从Order By
我仍然以相反的顺序看到结果:
这是我的完整代码:
DECLARE @ANubmer as Varchar(100)
DECLARE @BNumber as Varchar(100)
DECLARE @Login_Name as Varchar(100)
DECLARE @S_Date as datetime
DECLARE MYCursor CURSOR FOR
SELECT ANumber,BNumber,Login_Name,S_Date,Evaluator_ID,Evaluator_Date
FROM MyTable
ORDER BY S_Date
OPEN MyCursor
FETCH NEXT FROM MyCursor INTO @ANubmer, @BNumber,@Login_Name,@S_DT,@Evaluator_ID,@Evaluator_Date
WHILE @@FETCH_STATUS = 0
BEGIN
IF @Login_Name='ABC'
BEGIN
IF @Evaluator_ID is null AND @Evaluator_Date is null
UPDATE tblb
SET Evaluator_ID=@Login_Name,
Evaluator_Date=@S_DT
WHERE ACIDNumber=@ACIDNumber
END
FETCH NEXT FROM MyCursor INTO @ANubmer, @BNumber,@Login_Name,@S_DT,@Evaluator_ID,@Evaluator_Date
END
CLOSE MyCursor
DEALLOCATE MyCursor
核心逻辑是evaluator_Date
中的mytable
为空,更新
tblb
最早S_Date
。
tblb
获取日期更新,但顺序相反!
在此运行之后,值进入tblb但不是预期的方式:
例如,如果以下值在MyTable中:
ANumber BNumber Login_Name S_Date Evaluator_id Evaluator_Date
1 2 ABC 1/11/2015 Null Null
1 2 ABC 1/12/2015 Null Null
tblB将被视为:
ANumber BNumber Login_Name S_Date Evaluator_id Evaluator_Date
1 2 ABC 1/12/2015 ABC 1/12/2015
答案 0 :(得分:-1)
如果您还没有设法解决问题,请尝试首先使用Order By子句将select插入临时表。
SELECT DATA1, DATA2
INTO #TEMP_TABLE
FROM ORG_TABLE
ORDER BY 1, 2
使用此临时表顺序,声明光标:
DECLARE MYCursor CURSOR FOR
SELECT ANumber, CNumber, Login_Name, S_Date
FROM #TEMP_TABLE