作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
假设有一个存储过程SetCustomerName,它有一个输入参数Name,并且我有一个包含Name 列的表customers。因此,在我的存储过程中,我想设置客户的姓名。如果我写
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/40115141/
我是一名优秀的程序员,十分优秀!