2017-03-15 10 views
0

ストアドプロシージャの入力パラメータを静的なint値またはサブクエリから生成された値のいずれかに設定したいと思っています。SQLストアドプロシージャの入力変数を値に応じて設定する

基本的に私はストアドプロシージャの開始時にこれを持っています。その後に新しい製品を作成するための通常のINSERTクエリがあります。

IF @typeName = 'Unassigned' 
BEGIN 
    SET @typeName = 0; 
END 
ELSE 
BEGIN 
    SET @typeName = (SELECT type.id FROM shared.prod_type type 
    WHERE type.name = typeName COLLATE utf8_unicode_ci); 
END 

これはちょうど私の構文が間違っているが、一部の兆候であると言って私にはphpMyAdminでのエラーを与えています。

すべてのヘルプははるかに

+0

構文エラーは何ですか?コード内の行を指している必要があります。 –

+0

完全なクエリを表示し、 'BEGIN SET @typeName = 0;の近くで正しい構文を使用するために、MySQLサーバのバージョンに対応するマニュアルをチェックして、大きなエラーダンプを実行します。最後に@typeName =(タイプ2の行を選択してください) – Pierre

答えて

0

を高く評価し、このクエリは疑わしいです:

SELECT type.id 
FROM shared.prod_type type 
WHERE type.name = typeName COLLATE utf8_unicode_ci 

あなたはtypeNameという列または変数を持っている場合、それはうまくいくかもしれません。しかしこれはおそらくあなたが望むものです:

SELECT type.id 
FROM shared.prod_type type 
WHERE type.name = @typeName COLLATE utf8_unicode_ci 
+0

新しい製品を作成するときに、ユーザーが既存の製品タイプから選択するか、またはその場で自分自身を作成することができるフォームが用意されています。新しい製品タイプでは、製品を作成する前にそのタイプを新しいテーブルに作成するので、そのタイプのIDは不明なので、名前に基づいて製品のIDを返すためにサブクエリが必要です。 DBに格納されているもので、それが 'Unassigned'であれば、varの値を0にします。 – Pierre

+0

したがって、type.name = typeNameは元のパラメータの文字列値を、変更されたvar – Pierre

関連する問題