mysql存储过程参数似乎不适用于“@”(在符号处)

时间:2014-02-25 21:56:23

标签: c# mysql sql-server

我正在将MS SQL数据库更改为MySQL。

我重写了一个带有名为@Account_Number的参数的存储过程。当我在MySQL中运行存储过程时,我收到以下消息:Error Code: 1048 Column 'Account_Number' cannot be null

使用工作台我终于修改了一下,并发现当我从存储过程中删除“@”并将其重命名为parmAccount_Number时,存储过程将执行。

我真的想保持名为相同的存储过程输入参数,我不想返回并重命名我的MS SQL参数...以防我想要翻转数据库。

我找不到任何有关MySQL使用“@”....

的信息

有没有办法让它与“@”一起使用?

编辑

声明存储过程

CREATE PROCEDURE `My_sp`(
 `@Account_Number` varchar(8),....)

插入sp的部分

insert into 
My_Table
(
    Account_Number, ...
)
values
(
    @Account_Number,...
)

1 个答案:

答案 0 :(得分:2)

不,您不能以@符号开头命名MySQL过程变量。

@符号字符表示MySQL用户定义变量,它与过程变量完全不同。

最大的区别在于未声明用户定义的变量(它们没有数据类型),并且它们在会话(数据库连接)中具有范围,而不仅仅是过程。它会持续整个会话。 (这也意味着它可以在会话中的任何地方进行修改,任何SQL语句,触发器,函数或过程都可以修改它,这使它非常有用,并且还使它成为一个潜在的陷阱。

可以使用用户定义的变量作为传递给过程或函数的实际值。但是,您无法命名以@符号开头的MySQL过程变量或参数。

我认为这符合SQL 2003标准。

此处的文档:

http://dev.mysql.com/doc/refman/5.5/en/user-variables.html

<强>更新

有趣。

鉴于您能够通过在反引号中包含参数名来获得编译的过程(如您添加的示例语句中所示)...

您也可以尝试在反引号的INSERT语句中包含参数名称引用。 (我从来没有测试过;我以前从未尝试过“回复”变量名称;我以前从未见过这样做过。)但如果程序实际上正在编译,那么可能会有效。