问题描述
我在学位表上创建了一个项目,我想为其他 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'