MySQL : When stored procedure parameter name is the same as table column name

标签 mysql stored-procedures parameters

假设有一个存储过程 SetCustomerName,它有一个输入参数名称,我有一个表客户,列名称。 所以在我的存储过程中我想设置客户的名字。如果我写

UPDATE customers SET Name = Name;

这是不正确的,我看到了另外两种方式:

UPDATE customers SET Name = `Name`;
UPDATE customers SET customers.Name = Name;

第一个有效,但我没有在文档中找到可以将参数包装在 ` 字符内的信息。还是我在文档中遗漏了它(在这种情况下链接很受欢迎)。

还有哪些其他方式,这种情况下的标准方式是什么?重命名输入参数对我不利(因为如果您知道我的意思,我有自动对象关系映射)。

更新:

所以,有一个关于反引号 ( http://dev.mysql.com/doc/refman/5.0/en/identifiers.html ) 的链接,但它没有足够深入地解释如何使用它们(如何将它们与参数和列名一起使用)。

还有一件很奇怪的事情(至少对我来说是这样):你可以用任何一种方式使用反引号:

UPDATE customers SET Name = `Name`;
//or
UPDATE customers SET `Name` = Name;
//or even
UPDATE customers SET `Name` = `Name`;

而且它们的工作方式完全相同。

你不觉得这很奇怪吗?这种奇怪的行为是否在某处得到了解释?

最佳答案

区分参数和列(如果两者名称相同)的最简单方法是在列名中添加表名。

UPDATE customers SET customers.Name = Name;

甚至你也可以添加数据库前缀

UPDATE yourdb.customers SET yourdb.customers.Name = Name;

通过添加数据库名称,您可以从单个存储过程对多个数据库执行操作。

关于MySQL : When stored procedure parameter name is the same as table column name,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/866144/

相关文章:

c# - 如何将数据插入到 blob C#/mysql/uwp

php - 从php构造函数获取构造参数依赖

mysql - 程序在执行准备好的语句时静默终止

python - 在python函数中获取参数名称列表

arrays - Powershell:使用数组中项目的参数调用exe?

来自不同表的 MySQL 更新状态

python - 在 Pandas 数据框中加入关系表的层次结构

php - 日期等于或大于 DateTime 的 Laravel Eloquent

stored-procedures - IBM Worklight - 是否可以使用 Out 参数调用存储过程?

SQL 存储过程将参数传递给 "order by"