(SELECT CONCAT(@I, '_Delta') FROM table WHERE id_tb = @ID)
我使用上述语句作为INSERT的一部分。问题是整行被转换为@I
的值(这是一个索引,值是0,1,2,......)。所以,而不是得到SELECT的输出我得到0,1,2,......
CONCAT的预期值类似于"0_Delta"
,然后是"1_Delta"
等。用其中一个替换CONCAT就可以了。
任何意见将不胜感激。谢谢!
[代码]
DROP TABLE IF EXISTS xxx_tb; CREATE TABLE xxx_tb ( i_Validity INT, Delta INT );
DROP TRIGGER IF EXISTS AFTER_INSERT_ON_tb_in; DELIMITER $$ 创建TRIGGER AFTER_INSERT_ON_tb_in 在插入tb_in之后 对于每一行 BEGIN
SET @ID = NEW.id_tb;
SET @TYPE = (SELECT Type FROM header WHERE id_tb = @ID);
IF @TYPE = 'abcd' THEN
SET @SAMPLES = (SELECT SampleNumber FROM table WHERE id_tb = @ID);
IF(@SAMPLES > 1) THEN
SET @I = 0;
WHILE(@I < @SAMPLES) DO
INSERT INTO xxx_tb
(
i_Validity,
Delta
)
VALUES
(
(SELECT 0_Validity FROM table WHERE id_tb = @ID),
(SELECT CONCAT(@I, '_Delta') FROM table WHERE id_tb = @ID)
);
SET @I = @I + 1;
END WHILE;
END IF;
END IF;
END$$
DELIMITER; [代码]
答案 0 :(得分:0)
delta
被声明为整数。您正在从字符串值获得静默转换。因为@i
位于开头,所以这就是你得到的价值。
如果您想要字符串值,可以尝试将其声明为varchar(255)
。
insert
可以更轻松地编写insert . . . select
:
INSERT INTO xxx_tb(i_Validity, Delta)
SELECT `0_Validity`, CONCAT(@I, '_Delta')
FROM table WHERE id_tb = @ID);