2017-09-14 13 views
0

复制非常大的表到多个CSV文件我需要大包装的过程通过使日期作为参数到批量的过程通过使日期作为参数

例CSV输出复制非常大的表到多个CSV文件:
Jan2006Sales.csv,Feb2006Sales.csv ...

输出CVS文件的名称不只要豆腐块日期的提取物。

我有这样的:

@StartDate = '2015-01-01' 
@EndDate = '2015-01-31' 

DECLARE @sql varchar(8000) 
SELECT @sql = 'bcp "SELECT * FROM [DB_DATAWAREHOUSE].[dbo].[SALES_TBL] where Sales_date >= @StartDate and Sales_date <= @EndDate" ' 
+ 'queryout \\Salesasv\Saldw$\Ounbound\Jan2005Extract.csv -c -t| -T -S' 
+ @@servername 
EXEC master..xp_cmdshell @sql 
----- 
@StartDate = '2015-02-01' 
@EndDate = '2015-02-31' 
-- 
DECLARE @sql varchar(8000) 
SELECT @sql = 'bcp "SELECT * FROM [DB_DATAWAREHOUSE].[dbo].[SALES_TBL] where Sales_date >= @StartDate and Sales_date <= @EndDate" ' 
+ 'queryout \\Salesasv\Saldw$\Outbound\Feb2005Extract.csv -c -t| -T -S' 
+ @@servername 
EXEC master..xp_cmdshell @sql 
+1

欢迎来到SO。你试过什么了? – yacc

+2

代码看起来没问题。基本上。问题是什么?它没有提供预期的结果,抛出错误,......?您可以将重复部分放入存储过程并多次调用,也可以循环调用,具体取决于需求。 – dlatikay

回答

0

的简单循环上的日期参数,以及一些动态SQL的伎俩。

DECLARE @date_from DATETIME='20150101'; 
DECLARE @date_to DATETIME='20151231'; 

DECLARE @eom DATETIME; 
DECLARE @cmd NVARCHAR(MAX); 
DECLARE @query NVARCHAR(4000); 

WHILE @date_from<[email protected]_to 
BEGIN 
    SET @eom=EOMONTH(@date_from); 
    SET @query= 
     N'SELECT * '+ 
     N'FROM [DB_DATAWAREHOUSE].[dbo].[SALES_TBL] '+ 
     N'WHERE Sales_date>='''+CONVERT(VARCHAR(8),@date_from,112)+''' AND Sales_date<='''+CONVERT(VARCHAR(8),@eom,112)+''''; 
    SET @cmd= 
     N'bcp ' + 
      N'"'[email protected]+'" ' + 
      N'QUERYOUT "\\Salesasv\Saldw$\Ounbound\'+LEFT(DATENAME(MONTH,@date_from),3)+DATENAME(YEAR,@date_from)+'Extract.csv" ' + 
      N'-c -t| -T -S'; 
    EXEC master..xp_cmdshell @cmd; 
    --PRINT @cmd; 

    SET @date_from=DATEADD(MONTH,1,@date_from); 
END 
+0

谢谢TT。它看起来很完美,只是它提供了数据转换错误:“Msg 241,Level 16,State 1,Line 10 转换日期和/或时间从字符串转换失败。” – softgi

+0

@softgi我刚刚在[Rextester](http://rextester.com/l/sql_server_online_compiler)上运行了这个,没有任何错误(print命令未注释,exec语句注释掉)。 –

+0

嗨,谢谢。这是我得到这个错误的原因:你得到的错误是因为master..xp_cmdshell需要/支持@cmd输入,大小为Varchar(8000)或varchar(4000).. 它不会允许更多8000个字符 引用:https://www.experts-exchange.com/questions/24999178/Problems-using-varchar-max-in-Query.html – softgi