Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Gespeicherte Prozeduren, die Daten in CSV-Dateien exportieren, werden nur in eine Datei exportiert

Scheint bei mir gut zu funktionieren. Ich habe ein paar Vorschläge:

(1) hören Sie auf, die ganze Zeichenfolgenverkettung zu machen, um ein Datum zu erstellen. Sie können dasselbe viel einfacher tun wie in:

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

(2) Stoppen Sie die Deklaration von varchar ohne Länge. Und um die richtige Ausgabe sicherzustellen, bevorzuge ich convert:

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

(3) Anstatt den Code zu "debuggen", indem Sie die gespeicherte Prozedur ausführen und die Ausgabe im Ordner untersuchen, warum überprüfen Sie nicht zuerst Ihre Eingabe auf ihre Richtigkeit? Warum auch zwei Variablen für das Datum verwenden?

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