以下脚本的目标是删除表中所有不同用户的所有记录,但每个用户的前两个记录除外。
问题是脚本在这两行之间陷入了无限循环
user
完整的脚本是
WHILE @@FETCH_STATUS = 0
SET @Event = 0;
有人可以给我一些解决方案/解释吗?
答案 0 :(得分:4)
正如我在评论中所写,做这种事情的方法比使用游标要好得多,更不用说两个嵌套游标了。
一种更好的选择是使用公用表表达式和row_number,然后直接从公用表表达式中删除行。
我不确定代码是否正确,因为您没有提供示例数据或期望的结果,所以我没有真正的测试方法,但是我根据问题中的代码提出了建议:
import { TranslateLoader } from '@ngx-translate/core';
import { Observable } from "rxjs";
import { AngularFirestore } from "@angular/fire/firestore";
export class FirestoreTranslateLoader implements TranslateLoader {
constructor(private db: AngularFirestore) { }
getTranslation(lang: string, prefix: string = 'langs'): Observable<any> {
return this.db.doc(prefix + '/' + lang).valueChanges() as Observable<any>;
}
}
答案 1 :(得分:2)
如下所示更改此行:
DECLARE @Event int = 0, @User int = 0;
并删除此行
SET @Event = 0;
出现无限循环的原因是此代码:
WHILE @@FETCH_STATUS = 0
SET @Event = 0;
BEGIN
实际上是这样:
-- A loop of a single instruction, with no exit criteria
WHILE @@FETCH_STATUS = 0 SET @Event = 0;
-- begin a new code block, with no condition or loop
BEGIN