免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 6586 | 回复: 21
打印 上一主题 下一主题

忽然起了一个念头,欢迎大家一起想想 [复制链接]

论坛徽章:
7
数据库技术版块每日发帖之星
日期:2015-08-09 06:20:00数据库技术版块每日发帖之星
日期:2015-11-03 06:20:00数据库技术版块每日发帖之星
日期:2016-02-20 06:20:00数据库技术版块每日发帖之星
日期:2016-07-13 06:20:00数据库技术版块每日发帖之星
日期:2016-07-31 06:20:00数据库技术版块每日发帖之星
日期:2016-08-01 06:20:00数据库技术版块每日发帖之星
日期:2016-08-18 06:20:00
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-08-18 15:25 |只看该作者 |倒序浏览
这两天在整理一份系统安装脚本。
里面整理数据库预装数据的脚本的时候一个个表用PB从数据库里select * from ...然后再save rows as ... sql这样存成sql文件,这样整理上千个表真是苦不堪言。
忽然想到,能否用t-sql写一个过程将表的数据转成insert tablename values(....)的格式吗?

想了一下,动态链接表名和字段名和抽取字段类型不难,难的是字符串类型,如何抽取其中转义字符,例如 '和" 以及tab和回车符等,还有一个datetime类型的怎么转存,还真想不出来。

欢迎大家一起想一想。

论坛徽章:
6
水瓶座
日期:2014-06-04 03:34:37水瓶座
日期:2014-06-17 13:20:31数据库技术版块每日发帖之星
日期:2016-07-09 06:20:00数据库技术版块每日发帖之星
日期:2016-07-17 06:20:00数据库技术版块每日发帖之星
日期:2016-08-01 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
2 [报告]
发表于 2010-08-18 16:16 |只看该作者
想法很不错。 宣称很强大的sqlserver2005,如果不用第三方工具,即使management studio 2005都不能导出insert 语句。 虽然management studio2008实现了。

论坛徽章:
6
水瓶座
日期:2014-06-04 03:34:37水瓶座
日期:2014-06-17 13:20:31数据库技术版块每日发帖之星
日期:2016-07-09 06:20:00数据库技术版块每日发帖之星
日期:2016-07-17 06:20:00数据库技术版块每日发帖之星
日期:2016-08-01 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
3 [报告]
发表于 2010-08-18 16:20 |只看该作者
本帖最后由 andkylee 于 2010-08-18 16:22 编辑

select_column_list='insert into table_name(col1,col2,col3,...coln) values(' + convert(varchar,ID)
select_column_list=select_column_list+',"'+name+'"'
select_column_list=select_column_list+',"'+convert(varchar,birthday,120)+'"'
.......
select_column_list=select_column_list+lastcolumn

以上有过程处理。

然后
execute select "select "+ select_column_list + "from tablea_name" from table_name

论坛徽章:
0
4 [报告]
发表于 2010-08-19 08:23 |只看该作者
你这个不行的,需要判断是数字类型的还是字符类型的

论坛徽章:
7
数据库技术版块每日发帖之星
日期:2015-08-09 06:20:00数据库技术版块每日发帖之星
日期:2015-11-03 06:20:00数据库技术版块每日发帖之星
日期:2016-02-20 06:20:00数据库技术版块每日发帖之星
日期:2016-07-13 06:20:00数据库技术版块每日发帖之星
日期:2016-07-31 06:20:00数据库技术版块每日发帖之星
日期:2016-08-01 06:20:00数据库技术版块每日发帖之星
日期:2016-08-18 06:20:00
5 [报告]
发表于 2010-08-19 09:58 |只看该作者
是啊。不过这个问题,上次andkylee已经在上次全库搜索什么表含有某特定字符串的问题里作过了区分。
我昨晚又想了一下,觉得关键点还有这么几个:
1. 数值型与字符型的区分;
2. 字符串类型中,需要的转义字符如何应对,
3. 在charset是iso_1的ASE中,如何区分转义字符和中文,日文等扩展字符
感觉最关键的还是在于第3点上。

论坛徽章:
6
水瓶座
日期:2014-06-04 03:34:37水瓶座
日期:2014-06-17 13:20:31数据库技术版块每日发帖之星
日期:2016-07-09 06:20:00数据库技术版块每日发帖之星
日期:2016-07-17 06:20:00数据库技术版块每日发帖之星
日期:2016-08-01 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
6 [报告]
发表于 2010-08-19 12:47 |只看该作者
回复 4# hobbylu


   用存储过程的作用就是区分数字和字符类型, syscolumns.usertype列。

论坛徽章:
6
水瓶座
日期:2014-06-04 03:34:37水瓶座
日期:2014-06-17 13:20:31数据库技术版块每日发帖之星
日期:2016-07-09 06:20:00数据库技术版块每日发帖之星
日期:2016-07-17 06:20:00数据库技术版块每日发帖之星
日期:2016-08-01 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
7 [报告]
发表于 2010-08-19 12:51 |只看该作者
是啊。不过这个问题,上次andkylee已经在上次全库搜索什么表含有某特定字符串的问题里作过了区分。
我昨晚 ...
Eisen 发表于 2010-08-19 09:58



的确,重点在于转义字符上。


你说的“中文,日文等扩展字符”,是什么概念? 你是担心有些字在iso_1存储不下?

论坛徽章:
7
数据库技术版块每日发帖之星
日期:2015-08-09 06:20:00数据库技术版块每日发帖之星
日期:2015-11-03 06:20:00数据库技术版块每日发帖之星
日期:2016-02-20 06:20:00数据库技术版块每日发帖之星
日期:2016-07-13 06:20:00数据库技术版块每日发帖之星
日期:2016-07-31 06:20:00数据库技术版块每日发帖之星
日期:2016-08-01 06:20:00数据库技术版块每日发帖之星
日期:2016-08-18 06:20:00
8 [报告]
发表于 2010-08-19 13:17 |只看该作者
不。
iso_1字符集的字符串一般来说是1byte一个字符,不过来一个中文字符可就要两个byte,这后半个字符很有可能就是char(7)或char(10)吧

论坛徽章:
6
水瓶座
日期:2014-06-04 03:34:37水瓶座
日期:2014-06-17 13:20:31数据库技术版块每日发帖之星
日期:2016-07-09 06:20:00数据库技术版块每日发帖之星
日期:2016-07-17 06:20:00数据库技术版块每日发帖之星
日期:2016-08-01 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
9 [报告]
发表于 2010-08-19 14:04 |只看该作者
一个汉字是占2字节。
但是,你说的char(7),char(10) 如何显示问题是T-sql的事。
你执行select的时候会给你返回结果啊,顶多有些特殊字符需要转义罢了。


不过来一个中文字符可就要两个byte,这后半个字符很有可能就是char(7)或char(10)吧
--------------------------------------------------------------------------
看你这句话,感觉像是直接从dat文件上读取内容。
一个汉字的后半个字符必须asicc>128

论坛徽章:
7
数据库技术版块每日发帖之星
日期:2015-08-09 06:20:00数据库技术版块每日发帖之星
日期:2015-11-03 06:20:00数据库技术版块每日发帖之星
日期:2016-02-20 06:20:00数据库技术版块每日发帖之星
日期:2016-07-13 06:20:00数据库技术版块每日发帖之星
日期:2016-07-31 06:20:00数据库技术版块每日发帖之星
日期:2016-08-01 06:20:00数据库技术版块每日发帖之星
日期:2016-08-18 06:20:00
10 [报告]
发表于 2010-08-19 14:53 |只看该作者
我说的是,为了从select的结果集里面的字符串提取出 \t ,\n这样需要转义成char(7), char(10)的字符的时候很可能将半个汉字或日文什么的给遍历出来一起转掉了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP