mysql concat并插入不起作用

问题描述:

我在存储过程中添加了一个代码,它将“PID-”添加到id号,所以如果id号为1,结果为PID-1。但它不起作用。mysql concat并插入不起作用

下面的代码:

DROP PROCEDURE `inserproducts`// 
CREATE DEFINER=`root`@`localhost` PROCEDURE `inserproducts`(pid int,pname varchar(50),pdesc varchar(50),psupp varchar(50),pdate date,pquant int) 
begin 
insert into products(productid,productname,proddescription,supplier,lastpurchasedate,quantityleft) 
     values(select concat('PID',pid,pname),pdesc,psupp,pdate,pquant)); 

select pid=last_insert_id(); 
end 

如何加入插入和CONCAT在一起吗?请帮助我这个。

+0

你真的需要在那里选择? – 2013-03-13 16:57:31

+0

选择什么?我有2选择那里你知道 – 2013-03-13 17:05:49

使用INSERT INTO...SELECT

insert into products(productname,proddescription,supplier,lastpurchasedate,quantityleft) 
select concat('PID',pid,pname),pdesc,psupp,pdate,pquant 

,则可以省略列productid如果它是一个AUTO_INCREMENT列。

我想知道为什么你需要执行select pid=last_insert_id();pidIN参数

更新1

DROP PROCEDURE `inserproducts`; 
DELIMITER $$ 
CREATE DEFINER=`root`@`localhost` PROCEDURE `inserproducts` 
(
    pid int, 
    pname varchar(50), 
    pdesc varchar(50), 
    psupp varchar(50), 
    pdate date, 
    pquant int 
) 
begin 

    insert into products 
      (productname, 
      proddescription, 
      supplier, 
      lastpurchasedate, 
      quantityleft) 
    select concat('PID',pid,pname), pdesc, psupp, pdate, pquant; 

    select last_insert_id(); 
end$$ 
DELIMITER ; 
+0

那里的“价值”在哪里?我使用选择pid = last_insert-id()为我的vb6代码。 bty,它不起作用。很多错误。 – 2013-03-13 17:03:59

+0

@HandyManny这是错误吗? 'INSERT INTO ... SELECT'没有'VALUES'关键字。 – 2013-03-13 17:05:26

+0

你能提供像我的文章中的那些代码,但使用正确的代码吗?我只是复制和粘贴,因为它有很多错误。 – 2013-03-13 17:08:56

只是跟进...如果你指定的值,你不需要选择 - 可能有轻微的性能增益只要使用值:

DROP PROCEDURE `inserproducts`; 
DELIMITER $$ 
CREATE DEFINER=`root`@`localhost` PROCEDURE `inserproducts` 
(
    in pid int, 
    in pname varchar(50), 
    in pdesc varchar(50), 
    in psupp varchar(50), 
    in pdate date, 
    in pquant int 
) 
begin 
    insert into products 
     (productname, proddescription, supplier, lastpurchasedate, quantityleft) 
    values 
     (concat('PID',pid,pname), pdesc, psupp, pdate, pquant); 

    select last_insert_id(); 
end$$ 
DELIMITER ; 

我会离开选择一个人,除非你真的需要从另一个表中的数据...