假设有一个存储过程 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/