功能:想做一个存储过程,输入表名,文本文件名及其路径,完成指定表名的表的列名和数据导出到文本文件思路:1.利用parsename()解析表名,得到完整表名 2.利用sys.columns视图得到所有列的记录行(column_id, name) 3.使用2中得到的记录,利用column_id的顺序,将对应的name转换成预备输出的1条列名记录 4.利用表名查出所有数据,并与3中的那条记录合并在一起(有列名的数据才有意义) 5.利用exec master..xp_cmdshell '' 内嵌bcp命令的将4得到的数据导出问题:1,2,3的工作已经完成,4不能完成,转成的列名都是字符型的数据,而所对应的数据类型不一定都是字符型的,因此无 法合并(union),如果不采用合并后一起导出,而采用分两次分别把列名和数据导出,则文本文件会被覆盖。 请各位帮忙 1.是否可以实现不考虑数据类型的合并
2.或者是否可以实现追加方式的导出文本
2.或者是否可以实现追加方式的导出文本
/*
1(int) 2 nvarchar(100) 3 (float)--这是真实的列,每列的数据类型不一样
-----------------------------------------------
学生ID 学生姓名 分数 --第一行是字符型的
1 李 52.2
2 高 30.0
*/
bcp 能做到连列名一起导出吗?
你以为 你这列名混带数据的txt能直接用?
EXEC xp_cmdshell 'BCP "SELECT ''列名1'',''列名2'' UNION ALL SELECT col1,col2 FROM tb" queryout x:\aa.txt -t, -Usa -Ppassword'
create view vi_tablename
as
select 'c1 ' as c1 --人为的加入一行作为表头
union
select c1 from tablename
exec master..xp_cmdshell 'bcp "select c1 FROM abc.dbo.vi_tablename
where c1= ' '王五 ' 'or c1= ' 'c1 ' ' " queryout c:\temp.xls -c -S服务器名 -Usa -P密码 '
--方法二
使用文件复制的方法.
建立一个已经设置好格式的Excel文件做为模板. 每次导现都从这个模板文件复制一下, 复制成你真正用于导出数据的Excel文件.
这个复制的操作, 如果是在数据库服务器上完成, 可以使用xp_cmdshell实现文件复制(如果不在数据库服务器上, 则还是要写VBScript脚本, 不过比较操作ExcelApplication容易得多)
exec master.dbo.xp_cmdshell 'copy x:\model.xls x:\use.xls '
贴子来源飞诺网(http://bbs.firnow.com) 详细出处参考:http://bbs.firnow.com/dview4t134423.html
楼主想做成通用的估计是行不通的!直接导出表吧!导出后再到TXT里修改下导出的列名就可以了,在SQL那么麻烦!直接在TXT里改,只是一行而已!而且打开后还是第一行!
if object_id('test') is not null
drop table test
gocreate table test(a int ,b int)
goselect '列名1', '列名2'
union all
select a, b
from test
godrop table test/*
消息 245,级别 16,状态 1,第 2 行
在将 varchar 值 '列名1' 转换成数据类型 int 时失败。
*/