parameters de procédure stockée mysql ne semblent pas fonctionner avec "@" (A signe)

Je change une database MS SQL en MySQL.

J'ai réécrit l'une des procédures stockées qui prend un paramètre appelé @Account_Number . Lorsque j'exécute la procédure stockée dans MySQL, je reçois le message suivant: Error Code: 1048 Column 'Account_Number' cannot be null .

En utilisant le plan de travail j'ai finalement bricolé et compris que lorsque j'ai enlevé le "@" de mes procédures stockées et les renommer comme parmAccount_Number la procédure stockée s'exécuterait.

Je veux vraiment garder les parameters d'input de la procédure stockée nommé le même, et je ne veux pas revenir en arrière et renommer mes parameters MS SQL … juste au cas où je veux flip flop Bases de données.

Je ne trouve aucune information sur ce que MySQL fait avec le "@" ….

Y a-t-il un moyen de le faire fonctionner avec "@"?

MODIFIER

Déclaration de la procédure stockée

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

insert une partie de sp

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

Non, vous ne pouvez pas nommer les variables de procédure MySQL commençant par le signe @ .

Le caractère @ sign signifie une variable définie par l'user MySQL, ce qui est assez différent d'une variable de procédure.

Les grandes différences sont que les variables définies par l'user ne sont pas déclarées (elles n'ont pas de type de données) et qu'elles ont une scope au sein d'une session (connection à la database), pas seulement une procédure. Il persiste pendant toute la session. (Cela signifie également qu'il est sujet à modification n'importe où dans la session, toute instruction SQL, triggersur, fonction ou procédure peut le modifier, ce qui le rend très utile, et en fait également un piège potentiel.

Il est possible d'utiliser des variables définies par l'user comme valeurs réelles transmises à une procédure ou à une fonction. Mais vous ne pouvez pas nommer les variables de procédure MySQL ou les parameters commençant par un signe @ .

Je crois que cela est conforme aux normes SQL 2003.

Documentation ici:

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

METTRE À JOUR

Intéressant.

Étant donné que vous êtes en mesure d'get une procédure compilée en incluant le nom du paramètre dans les backticks (comme indiqué dans l'exemple d'instruction que vous avez ajouté) …

Vous pouvez également inclure la reference de nom de paramètre dans l'instruction INSERT dans les guillemets. (Je n'ai jamais testé ça, je n'ai jamais essayé de "cocher" les noms de variables avant, je n'ai jamais vu ça auparavant.) Mais si la procédure est en train de comstackr, alors peut-être que ça marcherait.