为什么这个非常简单的光标会破坏 SQL Server Management Studio?
Why is this very simple cursor breaking SQL Server Management Studio?
我在学位 table 上创建了一个项目,我想为其他 19 个学院复制该记录。我有一个非常简单的游标,但每次我 运行 它都会完全崩溃 SQL Server Management Studio。有没有办法重写此查询(或完全执行相同 INSERT INTO 的另一个查询),使其不会崩溃(并实际执行)?
DECLARE @Colleges VARCHAR(200)
DECLARE DUPLICATE_DEGREE CURSOR FOR
SELECT CollegeID FROM Colleges WHERE CollegeName <> 'Main Office'
OPEN DUPLICATE_DEGREE
FETCH NEXT FROM DUPLICATE_DEGREE INTO @Colleges
WHILE @@FETCH_STATUS = 0
BEGIN
INSERT INTO Degree
(
DegreeName
, CollegeID
)
SELECT
DegreeName
, @Colleges
FROM Degrees
WHERE DegreeID = 123
END
CLOSE DUPLICATE_DEGREE
DEALLOCATE DUPLICATE_DEGREE
您的脚本陷入无限循环,因为您永远不会前进光标,因此 @@FETCH_STATUS
的值永远不会改变,导致您为同一所大学添加相同的记录,令人作呕。在 INSERT
.
后添加 FETCH NEXT FROM DUPLICATE_DEGREE INTO @Colleges
Jake - 你不需要光标,试试这个:
DECLARE @DegreeName varchar (256)
SET @DegreeName = SELECT DISTINCT DegreeName from Degrees WHERE DegreeID = 123
INSERT INTO Degree (DegreeName, CollegeID)
SELECT @DegreeName, CollegeID
FROM Colleges WHERE CollegeName <> 'Main Office'
我在学位 table 上创建了一个项目,我想为其他 19 个学院复制该记录。我有一个非常简单的游标,但每次我 运行 它都会完全崩溃 SQL Server Management Studio。有没有办法重写此查询(或完全执行相同 INSERT INTO 的另一个查询),使其不会崩溃(并实际执行)?
DECLARE @Colleges VARCHAR(200)
DECLARE DUPLICATE_DEGREE CURSOR FOR
SELECT CollegeID FROM Colleges WHERE CollegeName <> 'Main Office'
OPEN DUPLICATE_DEGREE
FETCH NEXT FROM DUPLICATE_DEGREE INTO @Colleges
WHILE @@FETCH_STATUS = 0
BEGIN
INSERT INTO Degree
(
DegreeName
, CollegeID
)
SELECT
DegreeName
, @Colleges
FROM Degrees
WHERE DegreeID = 123
END
CLOSE DUPLICATE_DEGREE
DEALLOCATE DUPLICATE_DEGREE
您的脚本陷入无限循环,因为您永远不会前进光标,因此 @@FETCH_STATUS
的值永远不会改变,导致您为同一所大学添加相同的记录,令人作呕。在 INSERT
.
FETCH NEXT FROM DUPLICATE_DEGREE INTO @Colleges
Jake - 你不需要光标,试试这个:
DECLARE @DegreeName varchar (256)
SET @DegreeName = SELECT DISTINCT DegreeName from Degrees WHERE DegreeID = 123
INSERT INTO Degree (DegreeName, CollegeID)
SELECT @DegreeName, CollegeID
FROM Colleges WHERE CollegeName <> 'Main Office'