Sql 将每个客户的订单导出到单独的CSV文件

Sql 将每个客户的订单导出到单独的CSV文件,sql,sql-server-2012,export-to-csv,Sql,Sql Server 2012,Export To Csv,我有以下疑问: Select CustomerID, OrderName, OrderQuantity from Customers C join Orders O on C.CustomerID = O.CustomerID 结果: CutomerID | OrderName | OrderQuantity 1001 | Chicken | 2 1001 | Meat | 5 1002 | Pepsi | 13 1002 | 7

我有以下疑问:

Select CustomerID, OrderName, OrderQuantity 
from Customers C join Orders O on C.CustomerID = O.CustomerID
结果:

CutomerID | OrderName | OrderQuantity
1001      | Chicken   | 2
1001      | Meat      | 5
1002      | Pepsi     | 13
1002      | 7Up       | 7
是否仍要将每个客户行导出为单独的CSV文件

因此customer1001.csv文件将具有

CutomerID | OrderName | OrderQuantity
1001      | Chicken   | 2
1001      | Meat      | 5
CutomerID | OrderName | OrderQuantity
1002      | Pepsi     | 13
1002      | 7Up       | 7
并且customer1002.csv文件将具有

CutomerID | OrderName | OrderQuantity
1001      | Chicken   | 2
1001      | Meat      | 5
CutomerID | OrderName | OrderQuantity
1002      | Pepsi     | 13
1002      | 7Up       | 7

你能试试这个吗?您应该在查询中更改数据库名称

DECLARE CURS CURSOR FOR
Select C.CustomerID from Customers C join Orders O on C.CustomerID = O.CustomerID GROUP BY C.CustomerID

DECLARE @CustomerID INT
DECLARE @sqltext varchar(4000);

OPEN CURS
FETCH NEXT FROM CURS INTO @CustomerID

WHILE @@FETCH_STATUS = 0  
BEGIN 

SET @sqltext = 'bcp "Select CustomerID, OrderName, OrderQuantity from [DB].[dbo].Customers C join [DB].[dbo].Orders O on C.CustomerID = O.CustomerID WHERE C.CustomerID = ''' 
    + CONVERT(VARCHAR, @CustomerID) 
    + '''" queryout "D:\Test\customer' + CONVERT(VARCHAR, @CustomerID) + '.csv" -c -T -x -t,'

EXEC master..xp_cmdshell @sqltext

FETCH NEXT FROM CURS INTO @CustomerID
END
CLOSE CURS
DEALLOCATE CURS

您现在如何导出到CSV?你可以在家里做这件事SSIS@Nick.McDermaid我还没有编写任何代码——我可以使用SSIS,但如何通过SSIS实现这一点呢?要在SSIS中实现这一点,您需要从表中生成一个带有SELECT DISTINCT CustomerID的记录集,然后使用该记录集驱动一个for each循环。然后在循环内部生成一个文件名,并为该客户ID选择数据。这是一个概念:如果您不想使用SSI,@sarslan下面有一个很好的答案,我正在尝试@sarslan-answer-这似乎是一个很好的答案,我同意。只是有一些错误,我不确定是什么原因造成的。谢谢Hanks Sarslan,我得到了这些结果:输出用法:bcp{dbtable | query}{in | out | queryout | format}数据文件[-m maxerrors][f formatfile][e errfile][f firstrow][L lastrow][b batchsize][n本机类型][c字符类型][w宽字符类型][n保留非文本本机][V文件格式版本][-q带引号的标识符][C代码页说明符][t字段终止符][r行终止符][i输入文件][o输出文件][a数据包大小][S服务器名称][U用户名][P密码][x生成xml格式文件][d数据库名称][K应用程序意图][l登录超时]这意味着BCP命令行的生成存在一些问题。能否在EXEC master…之前的行上添加PRINT@sqltext…并显示它打印的内容?没有错误-这是打印结果-抱歉,我稍微更改了select语句-BCP select p.policyid,p.brooklandsreference,c.comments,c.dateadded from brooklands.dbo.policyd详细信息P join brooklands.dbo.comments C on P.PolicyID=C.PolicyID,其中P.PolicyID='7279'queryout D:\Test\customer7279.csv-C-T-xIt似乎正确,您使用的是哪个sql server版本?我在sql2012中试用过。仅供参考:您看到的“单列”内容纯粹是Excel的产物。该文件没有问题,只是excel打开它的方式。如果你在记事本中打开它,你就会明白我的意思。