MYSQL:如何在存储过程中按参数插入多个行值
我在谷歌上搜索,找到了插入多行的解决方案,如下所示:MYSQL:如何在存储过程中按参数插入多个行值,mysql,Mysql,我在谷歌上搜索,找到了插入多行的解决方案,如下所示: CREATE PROCEDURE `usAddCostumeSet` (argUserID BIGINT, argStarOID INT, argAcc1 INT, argAcc2 INT, argBody INT, argHead INT, argNow DateTime) BEGIN INSERT INTO COSTUME (UserID, StarOID, CostumeOID, CostumeTID, I
CREATE PROCEDURE `usAddCostumeSet`
(argUserID BIGINT, argStarOID INT, argAcc1 INT, argAcc2 INT,
argBody INT, argHead INT, argNow DateTime)
BEGIN
INSERT INTO COSTUME (UserID, StarOID, CostumeOID, CostumeTID, IsNewMark, CreateDate, FavDate)
VALUES (argUserID, argStarOID, argAcc1, argAcc1, true, argNow, null),
(argUserID, argStarOID, argAcc2, argAcc2, true, argNow, null),
(argUserID, argStarOID, argBody, argBody, true, argNow, null),
(argUserID, argStarOID, argHead, argHead, true, argNow, null);
END
我希望它像下面这样
INSERT INTO COSTUME (UserID, StarOID, CostumeOID, CostumeTID, IsNewMark, CreateDate, FavDate)
VALUES
if argAcc1 is not Zero (argUserID, argStarOID, argAcc1, argAcc1, true, argNow, null),
if argAcc2 is not Zero (argUserID, argStarOID, argAcc2, argAcc2, true, argNow, null),
if argBody is not Zero (argUserID, argStarOID, argBody, argBody, true, argNow, null),
if argHead is not Zero (argUserID, argStarOID, argHead, argHead, true, argNow, null);
END
有一个简洁的解决方案吗?您可以使用
插入到。。。选择
:
INSERT INTO COSTUME (UserID, StarOID, CostumeOID,
CostumeTID, IsNewMark, CreateDate, FavDate)
SELECT argUserID, argStarOID,
CASE WHEN argAcc1 <> 0 THEN argAcc1
WHEN argAcc2 <> 0 THEN argAcc2
WHEN argBody <> 0 THEN argBody
WHEN argHead <> 0 THEN argHead
END,
CASE WHEN argAcc1 <> 0 THEN argAcc1
WHEN argAcc2 <> 0 THEN argAcc2
WHEN argBody <> 0 THEN argBody
WHEN argHead <> 0 THEN argHead
END,
true, argNow, null
插入服装(UserID、StarOID、customoid、,
客户ID、IsNewMark、CreateDate、FavDate)
选择argUserID、argStarOID、,
argAcc1为0时的情况,然后为argAcc1
当argAcc2为0时,则为argAcc2
当argBody为0时,则为argBody
当argHead为0时,则为argHead
完,,
argAcc1为0时的情况,然后为argAcc1
当argAcc2为0时,则为argAcc2
当argBody为0时,则为argBody
当argHead为0时,则为argHead
完,,
true,argNow,null
想了一会儿
我意识到一个解决办法。使用UNIONALL
我不知道如何衡量性能或危险,这是代码
INSERT INTO COSTUME SELECT argUserID, argStarOID, tempTbl.idx, tempTbl.idx, true, argNow, null FROM (SELECT argAcc1 as idx UNION ALL
SELECT argAcc2 UNION ALL
SELECT argHair UNION ALL
SELECt argBody) as tempTbl WHERE tempTbl.idx != 0;
但毕竟我决定使用事务和多IF语句
任何建议都将被批准。。。谢谢要插入1行还是最多4行?