我有这样的一个表: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