我已经在SQL Server中使用下面的代码它工作正常,我正在尝试在mysql中使用相同的代码但是我收到了错误消息
1064-你在sql systex中有错误;检查与您的mysql服务器版本对应的手册,以便使用右侧systax Near'Declare @var Table(数量int,宽度varchar(255))在第1行插入@var选择
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
答案 0 :(得分:1)
MySQL不是Microsoft SQL Server。
它们具有非常不同的存储过程语言。在许多方面,与Microsoft相比,MySQL的存储过程语言是有限的,并且功能较少。大多数MySQL用户根本不编写存储过程,更喜欢用PHP,Ruby,Python,Java,C#或其他喜欢的语言在应用层编写业务逻辑。
以下是与您的示例程序相关的几点:
MySQL没有Table
类型。您不能将变量声明为表。
使用SET
为语句中的变量赋值,而不是INSERT
。
使用SELECT...INTO
将查询结果分配给变量。
存储过程中的每个语句都需要一个分号(;
)终止符。
你不能SELECT ... FROM @var
。表名不支持变量。您可以通过将@var连接成一个字符串,然后将该字符串用作prepared statement来完成此操作。
这不是一个完整的清单,列出了为了让这个程序在MySQL中运行而需要改变的地方,这只是差异的一个例子。
答案 1 :(得分: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 Cursor Usage
var中的临时表也不包含列id