2

StudentNameとGradeの2つのフィールドを持つStudentsテーブルがあります。グレードを更新するためのストアドプロシージャを作成しようとしています。生徒がAを持っている場合は、Bに変更します。Bを持っている場合は、Aに変更します。他に何かがある場合は、そのままにしておきます。これが私の最善の試みです

create procedure sp_changegrades
if Grade = 'A' update Students set Grade = 'B'

else if Grade = 'B' update Students set Grade = 'A'
4

3 に答える 3

5

使用するだけCASE

UPDATE Students
SET Grade = 
(
   CASE WHEN Grade = 'A' THEN 'B'
        WHEN Grade = 'B' THEN 'A'
        ELSE Grade     -- "If they have anything else I want to leave it alone."
    END
)

また

UPDATE Students
SET Grade = 
(
   CASE WHEN Grade = 'A' 
        THEN 'B'
        ELSE 'A'
    END
)
WHERE Grade IN ('A','B')
于 2012-10-27T16:44:20.883 に答える
0

このようにsmthを書くことができます。このソリューションでは、join部分的に更新してから更新するルールを定義します。

create procedure sp_changegrades
as
begin
    update Students set
        Grade = G.Grade_New
    from Students as S
        inner join (values
            ('A', 'B'),
            ('B', 'A')
        ) as G(Grade_Old, Grade_New) on G.Grade_Old = S.Grade 
end

またはあなたが使用することができますcase

create procedure sp_changegrades
as
begin
    update Students set
        Grade = 
           case Grade
               when 'A' then 'B'
               when 'B' then 'A'
               else Grade
           end
end
于 2012-10-27T16:45:27.510 に答える
0

Case ステートメントを利用し、where 句を追加して、関連する行のみを更新することができます。

UPDATE Students
SET Grade = 
(
   CASE WHEN Grade = 'A' THEN 'B'
        WHEN Grade = 'B' THEN 'A'
        ELSE Grade     -- "Included for Completeness, should never be utilized."
    END
)
WHERE Grade in ('A','B')
于 2012-10-27T17:08:54.277 に答える