Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL:当存储过程参数名与表列名相同时_Mysql_Stored Procedures_Parameters - Fatal编程技术网

MySQL:当存储过程参数名与表列名相同时

MySQL:当存储过程参数名与表列名相同时,mysql,stored-procedures,parameters,Mysql,Stored Procedures,Parameters,假设有一个存储过程SetCustomerName,它有一个输入参数名,我有一个表customers和列名。 所以在我的存储过程中,我想设置客户的名称。如果我写 UPDATE customers SET Name = Name; 这是不正确的,我认为还有两种方式: UPDATE customers SET Name = `Name`; UPDATE customers SET customers.Name = Name; 第一个是可行的,但我在文档中没有发现可以将参数包装在`字符中。或者我在文档中

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

UPDATE customers SET Name = Name;
这是不正确的,我认为还有两种方式:

UPDATE customers SET Name = `Name`;
UPDATE customers SET customers.Name = Name;
第一个是可行的,但我在文档中没有发现可以将参数包装在`字符中。或者我在文档中遗漏了它(在这种情况下,请链接)

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

更新:

因此,这里有一个关于backticks()的链接,但是没有对如何使用它们(如何将它们与参数和列名一起使用)进行足够深入的解释

还有一件非常奇怪的事情(至少对我来说):你可以用任何一种方式来使用backticks:

UPDATE customers SET Name = `Name`;
//or
UPDATE customers SET `Name` = Name;
//or even
UPDATE customers SET `Name` = `Name`;
它们的工作方式完全相同


你不觉得这很奇怪吗?这种奇怪的行为在什么地方得到解释了吗?

在MySQL查询语法中使用backticks记录如下:


因此,是的,您的第一个示例(使用反勾号)是正确的。

以下是您需要的链接:
在MySql中,backticks被称为“identifier quote”

我认为您的第一个示例实际上是向后的。如果您试图将“Name”列设置为“Name”输入参数,我认为应该是:

UPDATE customers SET `Name` = Name;
对于第二个示例,可以使用与在所有其他语句中相同的方式设置表别名:

UPDATE customers AS c SET c.Name = Name;

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

UPDATE customers SET customers.Name = Name;
甚至您也可以添加数据库前缀,如

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

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

这是一种方法,我知道这个答案比我老。似乎
@
不是过程参数的有效前缀,是否可以添加其他有效字符?嗯,除了
$
,我也不想将这些名称与我的php变量混合使用。