如何仅将列的一个值设置为 true 和 rest false

How to set only one value of column as true and rest false

我的数据库中有一个名为 PresentYear 的列,用于将特定年份设置为学校的学年。 2014-15。我添加了 default constraint,它将所有值设置为 'N'。在 assigncurrentyear 按钮上单击我想将其设置为 'Y' 并且当我将另一年设置为 PresentYear 之前设置的 PresentYear 应该重置为 'N' 并且仅table 中的一行应该有 'Y'。我将通过 academicID 来设置 PresentYear,我正在使用 stored procedure 来这样做,但我被困在这里了。

存储过程应该如何?

create PROCEDURE [dbo].[USP_SetAcademicYear]
    @AcademicID INT
AS
BEGIN
    IF(@AcademicID != 0)
    BEGIN 
        UPDATE dbo.Academic_Master 
        SET presentYear = 'y'
        WHERE AcademicId = @AcademicID
    END
END

使用Not Equal To运算符:

UPDATE Academic_Master
SET presentYear='N'
WHERE AcademicId <> @AcademicID

更新: 所以你的存储过程看起来像这样

create PROCEDURE [dbo].[USP_SetAcademicYear]
@AcademicID INT
AS
BEGIN
    IF(@AcademicID!=0)
    BEGIN 
        update Academic_Master 
        set presentYear='y'
        WHERE AcademicId=@AcademicID

        UPDATE Academic_Master
        SET presentYear='N'
        WHERE AcademicId <> @AcademicID
    END
END

只需更新需要更新的两行:

create PROCEDURE [dbo].[USP_SetAcademicYear]
    @AcademicID INT
AS
BEGIN
    IF(@AcademicID != 0)
    BEGIN 
        UPDATE dbo.Academic_Master 
        SET presentYear = CASE
             WHEN AcademicId = @AcademicID THEN 'y'
             ELSE 'N' END
        WHERE AcademicId = @AcademicID or presentYear = 'y'
    END
END