-3

我已经在 SQL Server 中使用了下面的代码,它工作正常,我试图在 mysql 中使用相同的代码,但我收到了错误消息

1064-您的 sql 系统有错误;检查与您的 mysql 服务器版本相对应的手册以获取正确的 systax 以使用 Near'Declare @var Table (quantity int, width varchar(255) ) 在第 1 行插入 @var Select

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 不是 Microsoft SQL Server。

它们有非常不同的存储过程语言。在许多方面,与 Microsoft 相比,MySQL 的存储过程语言是有限的并且功能较少。大多数 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 中的临时表也没有包含列 id

于 2013-03-21T12:34:52.717 回答