T-SQL无限循环

时间:2019-07-24 20:50:28

标签: sql-server tsql

以下脚本的目标是删除表中所有不同用户的所有记录,但每个用户的前两个记录除外。

问题是脚本在这两行之间陷入了无限循环

user

完整的脚本是

WHILE @@FETCH_STATUS = 0
SET @Event = 0;

有人可以给我一些解决方案/解释吗?

2 个答案:

答案 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