我正在将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,...
)
答案 0 :(得分:2)
不,您不能以@
符号开头命名MySQL过程变量。
@
符号字符表示MySQL用户定义变量,它与过程变量完全不同。
最大的区别在于未声明用户定义的变量(它们没有数据类型),并且它们在会话(数据库连接)中具有范围,而不仅仅是过程。它会持续整个会话。 (这也意味着它可以在会话中的任何地方进行修改,任何SQL语句,触发器,函数或过程都可以修改它,这使它非常有用,并且还使它成为一个潜在的陷阱。
可以使用用户定义的变量作为传递给过程或函数的实际值。但是,您无法命名以@
符号开头的MySQL过程变量或参数。
我认为这符合SQL 2003标准。
此处的文档:
http://dev.mysql.com/doc/refman/5.5/en/user-variables.html
<强>更新强>
有趣。
鉴于您能够通过在反引号中包含参数名来获得编译的过程(如您添加的示例语句中所示)...
您也可以尝试在反引号的INSERT语句中包含参数名称引用。 (我从来没有测试过;我以前从未尝试过“回复”变量名称;我以前从未见过这样做过。)但如果程序实际上正在编译,那么可能会有效。