这个是SQL中的存储过程。ALTER PROCEDURE [dbo].[LhStartInfo]
@channel int ,
@sdt varchar(25),
@xmmc varchar(60),
@Tm varchar(50),
@o_id bigint OUTPUTAS
BEGIN
SET NOCOUNT ON;
BEGIN
INSERT INTO StartLh(channel,sdt,xmmc,state,tm) VALUES (@channel,@sdt,@xmmc,'未完成',@Tm)
SET @o_id = @@IDENTITY
END
END在mysql中应该如何写呢?
1。表名如果是变量的应该什么写?那么增加记录的语句要怎么写?
2。返回新增加记录的ID值。
set @bm='tt';
set @!asql=concat('select * from ',@bm);
prepare stml from @asql;
execute stml;set @bm='tt';
set @!asql=concat('insert into ',@bm,'values(123)');
prepare stml from @asql;
execute stml;
2。返回新增加记录的ID值。
set @aa=LAST_INSERT_ID()
set @bm='tt';
set @asql=concat('select * from ',@bm);
prepare stml from @asql;
execute stml; set @bm='tt';
set @asql=concat('insert into ',@bm,'values (123)');
prepare stml from @asql;
execute stml;
2。返回新增加记录的ID值。
假设ID为自增
set @aa=LAST_INSERT_ID()
1。表名如果是变量的应该什么写?那么增加记录的语句要怎么写?
2。返回新增加记录的ID值。
拼成动态sql
prepare stml from @asql;
execute stml;参数是:in channel int;in sdt varchar(25);in xmmc varchar(60);in tm varchar(50)保存不了呀。是用Navicat里设置的。1 是数字类型转换错误?还是。连接出错?
2 如果是返回新增的ID,那么一定字段的字段名是 ID?而且自增型的吗?
);
prepare stml from @asql;
execute stml;
2、是自增的、字段名自行修改
SET @asql=CONCAT('insert into StartLh(channel,sdt,xmmc,state,tm) VALUES (',@channel,',',@sdt,',',@xmmc,',','未完成',',',@tm, ')'
);
prepare stml from @asql;
execute stml;
不用转换
startlh的结构是这样的 CREATE TABLE `startlh` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`channel` bigint(20) DEFAULT NULL,
`sdt` datetime DEFAULT NULL,
`edt` datetime DEFAULT NULL,
`xmmc` varchar(50) DEFAULT NULL,
`state` varchar(50) DEFAULT NULL,
`tm` varchar(50) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=gb2312;
参数:IN `channel` int,IN `sdt` datetime,IN `edt` datetime,IN `xmmc` varchar(50),IN `state` varchar(50),IN `tm` varchar(50),OUT `id` intBEGIN
INSERT INTO startlh(channel,sdt,edt,xmmc,state,tm) VALUES(channel,sdt,edt,xmmc,state,tm);
SET id=LAST_INSERT_ID();
END
搞定。
2
concat搞定。