仅在允许用户时更新所选列的存储过程

Stored procedure that only updates chosen column if user is allowed

我需要编写一个存储过程,允许用户更改 table 中的值,但仅限于某些行。基本上这是供调查人员定义他们想要的传感器参数,因此他们不能更改其他用户的参数。

我有两个 table:一个 Parameters table 和 CultureIDCode(每个文化有 3 行,所以这区分了哪一行用户想要更改)、Max_AlertMin_Alert 列;和一个 Users table,显示 UserIDCultureID(看看谁负责什么文化,每个人可以改变什么行)。

这是我写的代码,但我总是出错,尤其是列参数。

CREATE PROCEDURE Alter_Param 
    (IN id INT, 
     IN cat INT, 
     IN column VARCHAR(20), 
     IN value INT)
BEGIN
    SELECT UserID 
    FROM Users 
    WHERE CultureID = id 
    INTO @v1;

    IF @v1 = USER() 
    THEN
        UPDATE Parameters
        SET Column = value
        WHERE id = 'CultureID' AND 'CODE' = cat ;
    END IF;  
END

非常感谢您的帮助:)

SET Column = value - mysql 不会对列名进行变量替换,您需要使用动态 sql 或测试和更新要更改的每一列

WHERE id = 'CultureID' - 这应该是列名 - 删除引号。

感谢您的提示。我按照你所说的去做,而是选择将这部分过程变成一个变量,以解决错误。这是最终版本,效果很好!

BEGIN

SELECT IdUser 
FROM users 
WHERE IdCulture = id 
INTO @v1;

IF @v1 = SESSION_USER() 
THEN
    SET @alt := CONCAT('UPDATE test.parameters SET ', column, ' =', value,' WHERE IdCulture =', id,' AND Code =',cod,';');

    PREPARE stmt FROM @alt;
    EXECUTE stmt;
END IF;

END

感谢您的帮助!