Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在MySql中创建Insert语句的存储过程?

在MySql中创建Insert语句的存储过程?
EN

Stack Overflow用户
提问于 2010-05-04 08:06:24
回答 4查看 3.7K关注 0票数 0

我需要一个value过程来获取一个表的记录,并将值作为Insert语句返回给所选记录。

例如,存储过程应该有三个输入参数...

1-表名

2-列名

3列值

如果

1-表名= "EMP“

2-列名= "EMPID“

3-列值= "15“

然后输出应该是,select所有EMP的值,其中EMPID为15。一旦为上述条件选择了这些值,存储过程必须返回用于插入所选值的脚本。

这样做的目的是备份选定的值。当SP返回值{Insert statements}时,c#只会将它们写入.sql文件。

我不知道如何写这个SP,任何代码的样本都会出现。谢谢..

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-05-18 09:38:30

代码语言:javascript
运行
AI代码解释
复制
DELIMITER $$

DROP PROCEDURE IF EXISTS `sample`.`InsGen` $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `InsGen`(
in_db varchar(20),
in_table varchar(20),
in_ColumnName varchar(20),
in_ColumnValue varchar(20)
)
BEGIN

declare Whrs varchar(500);
declare Sels varchar(500);
declare Inserts varchar(200);
declare tablename varchar(20);
declare ColName varchar(20);


set tablename=in_table;


# Comma separated column names - used for Select
select group_concat(concat('concat(\'"\',','ifnull(',column_name,','''')',',\'"\')'))
INTO @Sels from information_schema.columns where table_schema=in_db and table_name=tablename;


# Comma separated column names - used for Group By
select group_concat('`',column_name,'`')
INTO @Whrs from information_schema.columns where table_schema=in_db and table_name=tablename;


#Main Select Statement for fetching comma separated table values

 set @Inserts=concat("select concat('insert IGNORE into ", in_db,".",tablename," values(',concat_ws(',',",@Sels,"),');')
 as MyColumn from ", in_db,".",tablename, " where ", in_ColumnName, " = " , in_ColumnValue, " group by ",@Whrs, ";");

 PREPARE Inserts FROM @Inserts;

EXECUTE Inserts;                    

END $$

DELIMITER ;
票数 0
EN

Stack Overflow用户

发布于 2010-05-04 23:01:13

您可以使用mysqldump来完成此操作:

代码语言:javascript
运行
AI代码解释
复制
mysqldump --no-create-info --skip-triggers 
  --where="$COLUMN_NAME='$COLUMN_VALUE'" --databases $DB --tables $TABLE_NAME
票数 4
EN

Stack Overflow用户

发布于 2012-12-25 08:28:20

为了扩展Anuya的答案(引用自http://kedar.nitty-witty.com/blog/mysql-stored-procedure-to-generate-extract-insert-statement),顺便说一句…

首先需要一些助手mysql函数:

代码语言:javascript
运行
AI代码解释
复制
/*
isNumeric - return 1/true if passed in string is numeric, false otherwise
Usage example: select isNumeric('2012-02-16'); => 0
*/
DROP FUNCTION IF EXISTS `bettermentdb`.`isNumeric`;
DELIMITER ;;
CREATE DEFINER=`betterment-web`@`localhost` FUNCTION `bettermentdb`.`isNumeric`(s varchar(255))
RETURNS TINYINT
DETERMINISTIC
BEGIN
   SET @match ='^(([0-9+-.$]{1})|([+-]?[$]?[0-9]*(([.]{1}[0-9]*)|([.]?[0-9]+))))$';
   RETURN IF(s regexp @match, 1, 0);
END;;
DELIMITER ;

/*
isNumeric - return an input wrapped in "'" if value is non-numeric, original otherwise.
Depends on isNumeric()
Usage example: select wrapNonNumeric(now()); => '2012-02-16'
           select wrapNonNumeric(NULL); => NULL
           select wrapNonNumeric(1); => 1
*/
DROP FUNCTION IF EXISTS `bettermentdb`.`wrapNonNumeric`;
DELIMITER ;;
CREATE DEFINER=`betterment-web`@`localhost` FUNCTION `bettermentdb`.`wrapNonNumeric`(s varchar(255))
RETURNS varchar(255)
DETERMINISTIC
BEGIN
   RETURN IF(isNumeric(s), s, concat("'", s, "'"));
END;;
DELIMITER ;

带有列名称的控制台输出定义了用引号括起来的非数字值,同时限制了给定行输入db.table:

代码语言:javascript
运行
AI代码解释
复制
DELIMITER ;;
DROP PROCEDURE IF EXISTS GenerateInsertSQL;
CREATE DEFINER=`root`@`localhost` PROCEDURE GenerateInsertSQL(IN in_db varchar(20), IN in_table varchar(32), IN in_row BIGINT)
READS SQL DATA
BEGIN
   DECLARE nullableValues varchar(1000);
   DECLARE colNames varchar(1000);
   DECLARE insertStmnt varchar(2000);

   SELECT group_concat(concat('IFNULL(wrapNonNumeric(`',column_name,'`), "NULL")')) INTO @nullableValues from information_schema.columns where table_schema=in_db and table_name=in_table;
   SELECT group_concat(concat('`',column_name,'`')) INTO @colNames from information_schema.columns where table_schema=in_db and table_name=in_table;

   SET @insertStmnt=concat("select concat('INSERT INTO `", in_db, "`.`", in_table, "`(", @colNames, ") VALUES (', concat_ws(', ',",@nullableValues,"),');') from ", in_db, ".", in_table, " where id = ", in_row, " group by ", @colNames, ";");
   PREPARE insertStmnt FROM @insertStmnt;
   EXECUTE insertStmnt;
END
DELIMITER ;
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2763722

复制
相关文章
PHP解析json、xml错误
解析json php内置函数json_decode() 可以解析json字符串 但是有的时候看起来正确的json,解析却一直返回null。 你知道吗,json是可能解析失败的,此时PHP不会产生提示。 我们需要手动通过json_last_error()函数获取 function json_decode_siam($string, $mark = false){ $data = json_decode($string, $mark); switch (json_last_error()) {
宣言言言
2019/12/15
2.5K0
Android 创建与解析XML(六)—— 比较与使用
其中,从处理方式看,有的采用了Java处理XML的标准方式,有的是经过第三方改进后的XML处理方式;从事件角度看,有的是基于Dom树节点,有的基于事件处理
阳光岛主
2019/02/19
9530
xml的解析
   XmlDocument doc=new XmlDocument();    StringReader sr=new StringReader(textBox1.Text);    XmlTextReader rd=new XmlTextReader(sr);    while(rd.Read())    {     //textBox2.Text +=rd.NodeType.ToString()+"\r\n";     if(rd.NodeType.ToString()=="Element")    
用户1075292
2018/01/23
3.6K0
XML的解析
昨天说了JSON解析,今天来看一下XML解析。在开发中需要对xml解析也是很常见的,跟JSON一样,大同小异。
一头小山猪
2020/04/10
3.1K0
Confluence 6 找到在创建 XML 备份的时候出现的错误
错误可能是因为数据库突然不可访问而产生。如果你在你的日志中看到了错误  'Couldn't backup database data' ,这个指南将会帮助你更正这个错误。我们强烈推荐你备份 Confluence 数据库和 Confluence 的 home 目录这种备份方式来备份你的 Confluence 服务器。你可以使用 Restoring Data from other Backups 的方法来恢复你的备份,如果需要的话。如果你对数据库 SQL 并不熟悉的话,我们建议你联系你的数据库管理员来获得相关的帮助。
HoneyMoose
2019/01/31
1.1K0
Android 创建与解析XML(一)—— 概述
Android 是最常用的智能手机平台,XML 是数据交换的标准媒介,Android 中可以使用标准的XML生成器、解析器、转换器 API,对 XML 进行解析和转换。
阳光岛主
2019/02/19
1.3K0
使用Python进行XML解析
XML 指可扩展标记语言(eXtensible Markup Language),常被设计用来传输和存储数据。 在进行医学图像标注时,我们常使用XML格式文件来存储标注,以下展示了使用Python来提取标注的坐标值。
范中豪
2020/07/14
1.3K0
使用 Javascript 解析 XML:jParse
jParse 是一个 jQuery 插件,它能够用来解析上通过 jQuery .ajax 方法加载的的 XML 文件。jParse 非常容易使用,大小只有 2KB,非常轻量级,并且在所有的主流浏览器上都兼容。(Firefox 1.5+,Safari 3+,Chrome 3,Internet Explorer 6+,Opera 9+)。
Denis
2023/04/16
6250
Android 创建与解析XML(三)—— Sax方式
SAX是一种占用内存少且解析速度快的解析器,它采用的是事件启动,不需要解析完整个文档,而是按照内容顺序看文档某个部分是否符合xml语法,如果符合就触发相应的事件,所谓的事件就是些回调方法(callback),这些方法 定义在ContentHandler中,下面是其主要方法: startDocument():当遇到文档的时候就触发这个事件 调用这个方法 可以在其中做些预处理工作,如:申请对象资源
阳光岛主
2019/02/19
9360
【C#】创建、解析 xml 文件(XmlDocument 方式)
本文使用 System.Xml 中的 XmlDocument 解析 xml 格式的文件。另外,由于我是粗略的看了下官方文档和一些博客,可能会有许多错误的地方,望指出。
全栈程序员站长
2022/09/06
1.7K0
Android 创建与解析XML(二)—— Dom方式
Dom方式创建XML,应用了标准xml构造器 javax.xml.parsers.DocumentBuilder 来创建 XML 文档,需要导入以下内容
阳光岛主
2019/02/19
6530
Android 创建与解析XML(四)—— Pull方式
Android系统中和创建XML相关的包为org.xmlpull.v1,在这个包中不仅提供了用于创建XML的 XmlSerializer,还提供了用来解析XML的Pull方式解析器 XmlPullParser
阳光岛主
2019/02/19
1.4K0
golang的xml、json解析
xml golang的xml处理主要应用Unmarshal、Marshal方法实现,解析一个xml到struct如下,首先是xml文件: <?xml version="1.0" encoding="u
用户1141560
2017/12/26
3K0
golang的xml、json解析
Java解析XML的实践
通过这段代码,重点是需要理解他的解析过程,就可以根据实际用到的XML格式,写出对应的解析逻辑。
bisal
2023/02/16
1K0
XML解析器(TinyXML)的使用指南
XML解析器(TinyXML)的使用指南 关于XML文件的解析方法的引导, 大家可以去试试这个工具(TinyXML) 1.首先下载TinyXML库的文件,这里给出链接,大家自己去下吧,记着要上国际
用户3519280
2023/07/06
1.1K0
java解析XML的方法
1.DOM 实现方法 xml文件 <?xml version="1.0" encoding="utf-8"?> <Accounts> <Account type="type1">
HUC思梦
2020/09/03
1.1K0
xml解析---Java解析xml文件
dom4j解析xml文件、之前用下面的方法,90M的xml,500万行,解析完插入数据库,单线程,不到1小时搞定,而只是解析数据,只用了7秒。
IT云清
2019/01/22
7.1K0
Java解析XML(一) 使用DOM读取XML文件
DOM 是最容易使用的java XML解析器。它可以解析一个完整的XML文档并将其加载到内存中,然后用对象对其进行建模,以实现简单的node遍历。DMO是将XML直接加载到内存中进行处理的,所以不建议解析较大的XML文件。
青山师
2023/05/05
1.4K0
java xml解析框架_JAVA解析xml的五种方式对比
本篇文章主要对比Java即系xml的五种方式,这五种方式各有利弊,大家可以看情况采用哪一种。
全栈程序员站长
2022/09/05
1.7K0
点击加载更多

相似问题

Vuex状态变化传播

11

Vuex,动作中的状态变化

14

Vuex状态与Firebase同步

12

VueJS Vuex -承诺解决状态变化?

20

如何正确观察Vuex中的状态变化?

112
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文