-3

私はすでにSQL Serverで以下のコードを使用していますが、正常に動作しています。mysqlで使用しようとしているのと同じコードですが、エラーメッセージが表示されました

1064-SQL systex にエラーがあります。Near'Declare @var Table (quantity int, width varchar(255) ) Insert @var Select at line 1

Declare @var Table 
    ( quantity int, width varchar(255) )
Insert @var
SELECT DISTINCT
    vtiger_inventoryproductrel.quantity, vtiger_inventoryproductrel.width
From
    vtiger_inventoryproductrel

Declare @var1 Table 
    ( quantity int, width varchar(255) )

Declare @Order_Item_Id varchar(10),@Qty int 
Set @Order_Item_Id = ''
While @Order_Item_Id < (Select Max(id) From @var)

Begin 
    Select @Order_Item_Id= Min(id) from @var where id > @Order_Item_Id
    Select @Qty = quantity From @var Where id = @Order_Item_Id
    While @Qty>0
    Begin 
        Set @Qty = @Qty-1 
        Insert into @var1 select * From @var Where id = @Order_Item_Id
    End 
End 

Select * From @var1
4

2 に答える 2

1

MySQLはMicrosoftSQLServerではありません。

それらは非常に異なるストアドプロシージャ言語を持っています。多くの点で、MySQLのストアドプロシージャ言語は制限されており、Microsoftの言語に比べて機能が劣っています。MySQLのほとんどのユーザーは、ストアドプロシージャをまったく記述せず、PHP、Ruby、Python、Java、C#、またはその他のお気に入りの言語でアプリケーション層にビジネスロジックを記述することを好みます。

手順の例に関連するいくつかのポイントを次に示します。

  • MySQLにはTableタイプがありません。変数をテーブルとして宣言することはできません。

  • SETではなく、ステートメント内の変数に値を割り当てるために使用しますINSERT

  • SELECT...INTOクエリの結果を変数に割り当てるために使用します。

  • ストアドプロシージャの各ステートメントには、セミコロン(;)ターミネータが必要です。

  • できませんSELECT ... FROM @var。変数はテーブル名としてサポートされていません。これを行うには、@ varを文字列に連結し、その文字列をプリペアドステートメントとして使用します。

これは、この手順をMySQLで機能させるために変更する必要があるものの完全なリストではなく、違いのほんの一例です。

于 2013-03-21T12:42:58.533 に答える
0

mysql で一時テーブルを作成する

create temporary table var( quantity int, width varchar(255) );
create temporary table var1(quantity int, width varchar(255));

データを一時テーブルに挿入する

insert into var(quantity, width )
SELECT DISTINCT vtiger_inventoryproductrel.quantity, vtiger_inventoryproductrel.width From vtiger_inventoryproductrel

mysql テーブルからデータを読み取るには、カーソルを使用しません。 Mysql カーソルの使用法

また、var no contain column id の一時テーブル

于 2013-03-21T12:34:52.717 に答える