我有這樣的一個表:T-SQL:不明白爲什麼IF子句不會被調用
CREATE TABLE [dbo].[Scores](
[Id] [int] IDENTITY(1,1) NOT NULL,
[Score] [float] NULL,
CONSTRAINT [PK_Scores] PRIMARY KEY CLUSTERED
(
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
而且我有一些的INSERT
INSERT INTO Scores (Score) VALUES (0.5)
INSERT INTO Scores (Score) VALUES (2)
INSERT INTO Scores (Score) VALUES (3)
INSERT INTO Scores (Score) VALUES (4.5)
然後我意識到我需要改變一切分數0.5應該是2等。 所以,我用光標來幫助我。就像這樣:
DECLARE @id int
DECLARE @score float
DECLARE myCursor CURSOR LOCAL FAST_FORWARD FOR
SELECT Id, Score
FROM [dbo].[Scores]
OPEN myCursor FETCH NEXT FROM myCursor INTO @id, @score
WHILE @@FETCH_STATUS = 0
BEGIN
PRINT 'Id: ' PRINT @id
PRINT 'Score: ' PRINT @score
-- do your tasks here
FETCH NEXT FROM myCursor INTO @id, @score
IF @score = 2
BEGIN
UPDATE Scores set Score = 3.0 WHERE Id = @id
END
IF @score = 3
BEGIN
UPDATE Scores set Score = 4.0 WHERE Id = @id
END
IF @score = 0.5
BEGIN
UPDATE Scores set Score = 2.0 WHERE Id = @id
END
IF @score = 4.5
BEGIN
UPDATE Scores set Score = 5.0 WHERE Id = @id
END
END
CLOSE myCursor DEALLOCATE myCursor
之前,你提出了一個更好的解決辦法,請告訴我爲什麼 此行不會被調用:
UPDATE Scores set Score = 2.0 WHERE Id = @id
」在您提出更好的解決方案之前,請告訴我爲什麼這行永遠不會被調用:「 –
更新..... :) – DaveShaw
儘管SQL在優化和遊標時遇到困難。如果你沒有任何明確的遊標理由,我會堅持我發佈的更新和案例解決方案。 – DaveShaw