【问题标题】:How to set only one value of column as true and rest false如何仅将列的一个值设置为真,其余为假
【发布时间】:2015-03-29 15:29:22
【问题描述】:

我的数据库中有一个名为 PresentYear 的列,用于将特定年份设置为前学校的学年。 2014-15。我添加了一个default constraint,它将所有值设置为'N'。在assigncurrentyear 按钮单击上,我想将其设置为'Y',当我将另一年设置为PresentYear 时,先前设置的PresentYear 应重置为'N',并且表中只有一行应具有'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

【问题讨论】:

  • 我建议创建/使用查询来获得正确的结果。将列设置为这种瞬态需要太多的工作。

标签: sql sql-server winforms sql-server-2008 stored-procedures


【解决方案1】:

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

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

【讨论】:

  • @saurabh64 Damien 是对的,您应该使用他的答案,因为如果表格的行太多,我的答案将不会有效。使用 Damien 的代码,您只需在每个按钮单击时更新 2 行。
  • 在这种情况下可能无关紧要,但请注意,另一个答案(如果它适合您,您应该通过点击刻度线来接受)将更新 all 表中的行。几行无关紧要,但如果您将来要处理其他表中的数百万行,则可能会出现问题。
【解决方案2】:

使用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

【讨论】:

  • 我有一个默认约束,当在数据库中插入记录时,它会将所有值设置为“N”
  • 所有值是什么意思?添加记录时,是否将所有记录的 presentYear 值设置为“N”?
  • 是的,只有在按钮单击时我想将其设置为'Y'
  • 好的,点击按钮就可以运行存储过程了,对吧?并且在将一行设置为 presentYear 之后,您想将所有行的 presentYear 除了 选择为“N”,对吗?您的脚本已将所选行的 presentYear 设置为“Y”,您可以将我的代码添加到脚本中以将所有行的 presentYear 除了选择为“N”。
  • 你不能在存储过程中间使用GOGO 不是 SQL 语句或命令 - 它是 SQL Server Management Studio 功能
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-05-06
  • 1970-01-01
  • 2020-10-07
  • 1970-01-01
  • 2012-08-31
  • 2014-09-14
  • 1970-01-01
相关资源
最近更新 更多