为什么这个非常简单的光标会破坏 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'