sql >> Database >  >> RDS >> Sqlserver

Opgeslagen procedure die gegevens naar csv-bestanden exporteert, wordt alleen naar één bestand geëxporteerd

Lijkt me prima te werken. Ik heb een paar suggesties:

(1) stop met al die aaneenschakeling van strings om een ​​datum op te bouwen. U kunt hetzelfde veel gemakkelijker doen als in:

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

(2) stop met het declareren van varchar zonder lengte. En om de juiste output te garanderen, converteer ik het liefst:

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

(3) in plaats van de code te "debuggen" door de opgeslagen procedure uit te voeren en de uitvoer in de map te inspecteren, waarom zou u dan niet eerst uw invoer controleren? En waarom twee variabelen gebruiken voor de datum?

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. PostgreSQL implementeren voor hoge beschikbaarheid

  2. Bulk/batch update/upsert in PostgreSQL

  3. Oracle naar PostgreSQL — Cursors en algemene tabeluitdrukkingen

  4. SQL Server DATEPART() vs DATENAME() - Wat is het verschil?