简体   繁体   中英

Why is this very simple cursor breaking SQL Server Management Studio?

I have created an item on the Degree table and I want to duplicate that record for 19 other Colleges. I have a really simple cursor, but every time I run it it totally crashes SQL Server Management Studio. Is there a way to rewrite this query (or another query entirely which performs the same INSERT INTO) so that it does not crash (and actually executes)?

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

Your script is getting stuck in an infinite loop because you're never advancing the cursor and therefore the value of @@FETCH_STATUS never changes resulting in you adding the same record for the same college ad nauseum. Add FETCH NEXT FROM DUPLICATE_DEGREE INTO @Colleges after the INSERT .

Jake - you don't need a cursor, try this:

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'

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM