【问题标题】:SQL toggle variable in database数据库中的 SQL 切换变量
【发布时间】:2011-06-22 10:48:00
【问题描述】:

我在我的数据库中有一个表的过程,但它似乎没有按照我的意愿去做。有人可以检查我是否做错了吗?我都是 SQL 新手。

这是我的程序。 当我告诉它时,它应该将管理员状态从 1 更改为 0 和从 0 更改为 1。但是由于某种原因它改变了它并且没有改变它:(

ALTER PROCEDURE [sesuser].[Login_Admin_Toggle]
(
    @loginID INT
)

AS
BEGIN

DECLARE @tmpId INTEGER;

SET @tmpId = (SELECT SESAdmin FROM [ses_users].[sesuser].[SESLogin] WHERE SESLoginID = @loginID);

IF (@tmpId = 1)
BEGIN
    SET @tmpId = 0
    RETURN
END
ELSE
    SET @tmpId = 1

UPDATE [ses_users].[sesuser].[SESLogin]
SET SESAdmin = @tmpId   
WHERE SESLoginID = @loginID

END

【问题讨论】:

    标签: sql database toggle procedure


    【解决方案1】:

    Alex K 完全正确。您将变量设置为 0,然后返回,这意味着您永远不会从那里访问 UPDATE 语句。

    但是,稍微有点切线,您实际上可以在一个语句中完成所有这些...

    BEGIN
    
      UPDATE [ses_users].[sesuser].[SESLogin]
      SET SESAdmin = 1 - SESAdmin
      WHERE SESLoginID = @loginID
    
    END
    

    【讨论】:

      【解决方案2】:

      它不会切换回来,因为你 RETURN 并且如果 @tmpId = 1 会停止执行,所以它永远不会更新为 0

      【讨论】:

      • 我在一个例子中看到过这样写的 if 语句,因此我认为它是正确的语法。你能告诉我应该如何正确写吗?
      • 只需删除 RETURN 行。 RETURN 是一个命令,意思是“立即停止执行存储过程”。它周围的 BEGIN 和 END 也不是必需的,但有些人可能会建议以任何方式包含它们是更好的做法(但我也会将它们包含在 ELSE 块中的 SET @tmpId = 1 周围。)
      猜你喜欢
      • 1970-01-01
      • 2014-08-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-16
      • 2011-12-27
      相关资源
      最近更新 更多