我正在尝试将数据从sql server表导出到没有ssms的csv文件。
我尝试通过使用bcp创建存储过程来实现它。declare @sql nvarchar(4000); select @sql = 'bcp "select * from table" queryout c:\file.csv -c -t, -T -S'+ @@servername exec xp_cmdshell @sql
1)这个查询产生了预期的结果。但是我想要的是它还应该包括csv文件中的列名。那么我该如何实现呢?
2)我希望给定数据库中的所有表都得到这个结果,那么该怎么做呢?
请尽快给予建议或解决方案
谢谢
3条答案
按热度按时间7gyucuyw1#
我知道的唯一解决办法...
1.查询数据字典并生成一个csv字段列表,然后将标题. csv与data.csv连接起来。这将是查询columns表,但您需要注意生成要匹配的SQL,因为您希望消除列列表与数据不匹配的任何可能性。
1.创建一个视图,其中第一行包含所有字段名
union all
,并选择数据。比如:
不过,这可能需要转换日期的类型。
vcirk6k62#
我建议采取以下行动:
在
.bat
文件中。我认为,对于您想要做的事情,最好只是从批处理文件/命令行使用
bcp
命令,而不是在SQL Server中启用xp_cmdshell
,这可能会引入安全问题。另外,我想指出的是,我不确定列是否总是以相同的顺序出现(在我的情况下是这样)。
编辑:批处理文件说明。我基本上运行了2个
bcp
命令,并将输出发送到2个不同的文件,因为我找不到将输出附加到另一个文件的选项。然后我只使用type
命令将数据添加到已经包含列列表的文件中,并删除包含数据的文件,因为不再需要它。请随意修改和搞乱它,让我知道,如果你遇到任何问题。
nle07wnf3#
如果你想用SQL表数据的列名试试这个代码:-