仅在允许用户时更新所选列的存储过程
Stored procedure that only updates chosen column if user is allowed
我需要编写一个存储过程,允许用户更改 table 中的值,但仅限于某些行。基本上这是供调查人员定义他们想要的传感器参数,因此他们不能更改其他用户的参数。
我有两个 table:一个 Parameters
table 和 CultureID
、Code
(每个文化有 3 行,所以这区分了哪一行用户想要更改)、Max_Alert
和 Min_Alert
列;和一个 Users
table,显示 UserID
和 CultureID
(看看谁负责什么文化,每个人可以改变什么行)。
这是我写的代码,但我总是出错,尤其是列参数。
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
感谢您的帮助!
我需要编写一个存储过程,允许用户更改 table 中的值,但仅限于某些行。基本上这是供调查人员定义他们想要的传感器参数,因此他们不能更改其他用户的参数。
我有两个 table:一个 Parameters
table 和 CultureID
、Code
(每个文化有 3 行,所以这区分了哪一行用户想要更改)、Max_Alert
和 Min_Alert
列;和一个 Users
table,显示 UserID
和 CultureID
(看看谁负责什么文化,每个人可以改变什么行)。
这是我写的代码,但我总是出错,尤其是列参数。
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
感谢您的帮助!