sql >> Databasteknik >  >> RDS >> Sqlserver

Lagrad procedur som exporterar data till csv-filer exporterar endast till en fil

Verkar fungera bra för mig. Jag har några förslag:

(1) sluta göra all den strängsammansättningen för att skapa ett datum. Du kan göra samma sak mycket lättare som i:

SELECT @StartDT = DATEADD(MONTH, DATEDIFF(MONTH, '19000101', @MinDOS), '19000101');

(2) sluta deklarera varchar utan längd. Och för att säkerställa rätt utdata föredrar jag konvertera:

SET @FileLocation = 'C:\test\' + @TableName
   + CONVERT(CHAR(10), @StartDT, 120) + '.csv';

(3) istället för att "felsöka" koden genom att köra den lagrade proceduren och inspektera utdata i mappen, varför inte förnuftskontrollera din inmatning först? Och varför använda två variabler för datumet?

DECLARE 
   @StartDT DATE, 
   @TableName NVARCHAR(50), 
   @FileLocation VARCHAR(255);

SET @TableName = N'ViewAccountDetail';

SELECT @StartDT = DATEADD(MONTH, DATEDIFF(MONTH, '19000101', MIN(dos)), '19000101')
   FROM dbo.accn_demographics;

   PRINT @StartDT;
-- ^^^^^ debugging 101 - what month do we think we're starting at?

WHILE @StartDT < '20110901'
BEGIN
    SET @FileLocation = 'C:\test\' + @TableName
      + CONVERT(CHAR(10), @StartDT, 120) + '.csv';

      PRINT @FileLocation;
    --^^^^^ again, debugging 101 - what does the filename currently look like?

    --EXEC BCP_Text_File @TableName, @FileLocation    
    SET @StartDT = DATEADD(MONTH, 1, @StartDT);
END



  1. Entity Framework 6-transaktionsåterställning

  2. PHP-varning:mysqli_connect():(HY000/2002):Anslutning nekad

  3. Skapa en DML-utlösare i SQL Server

  4. Jämföra datalager för PostgreSQL - MVCC vs InnoDB