gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 06:27:50 25 4
gpt4 key购买 nike

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

25 4 0