为什么这个非常简单的游标会破坏 SQL Server Management Studio?

问题描述

我在学位表上创建了一个项目,我想为其他 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 的值永远不会改变,导致您为同一个大学广告添加相同的记录。在 FETCH NEXT FROM DUPLICATE_DEGREE INTO @Colleges 之后添加 INSERT

,

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'

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...