Procédure stockée qui exporte les données dans des fichiers csv seules les exportations vers un fichier

J'ai un plaisir script:

DECLARE @StartDT DATE
DECLARE @MinDOS DATE
DECLARE @TableName VARCHAR(50)
SET @TableName = 'ViewAccountDetail'
SELECT @MinDOS = MIN(dos) FROM accn_demographics
SELECT @StartDT = 
    CAST(CAST(datepart(YYYY,@MinDOS) AS varchar) + '-' + CAST(datepart(mm,@MinDOS) AS varchar) + '-' + CAST('01' AS varchar) AS DATETIME)
DECLARE @FileLocation VARCHAR(50)

WHILE @StartDT < '20110901'
BEGIN
    SET @FileLocation='C:\test\'+@TableName+cast(@StartDT as varchar)+'.csv'
    EXEC BCP_Text_File @TableName, @FileLocation    
    SET @StartDT = DATEADD(MONTH,1,@StartDT)
END

Qu'il est censé faire est d'exporter des données dans des fichiers csv. Les noms des fichiers doivent être:

C:\test\ViewAccountDetail2011-01-01.csv
C:\test\ViewAccountDetail2011-02-01.csv
C:\test\ViewAccountDetail2011-03-01.csv
C:\test\ViewAccountDetail2011-04-01.csv
C:\test\ViewAccountDetail2011-05-01.csv
C:\test\ViewAccountDetail2011-06-01.csv
C:\test\ViewAccountDetail2011-07-01.csv
C:\test\ViewAccountDetail2011-08-01.csv

mais il stocke toutes les données dans le même:

C:\test\ViewAccountDetail2011-01-01.csv

j'ai fait un print @FileLocation et a confirmé qu'il met correctement à jour cette variable.

est-il apparent, ÉVIDENT chose qui me manque ici?

Pour info cette ligne:

EXEC BCP_Text_File @TableName, @FileLocation

appelle cette procédure:

  ALTER PROCEDURE [dbo].[BCP_Text_File]
    @table    NVARCHAR(255),  
    @filename VARCHAR(100)  
AS
BEGIN
  SET NOCOUNT ON;

  IF OBJECT_ID(@table) IS NOT NULL
  BEGIN
    DECLARE 
        @sql NVARCHAR(MAX), 
        @cols NVARCHAR(MAX) = N'';

    SELECT @cols += ',' + name
      FROM sys.columns
      WHERE [object_id] = OBJECT_ID(@table)
      ORDER BY column_id;

    SELECT @cols = STUFF(@cols, 1, 1, '');

    SET @sql = N'EXEC master..xp_cmdshell ''bcp "SELECT ''''' 
        + REPLACE(@cols, ',', ''''',''''') + ''''' UNION ALL SELECT ' 
        + 'RTRIM(' + REPLACE(@cols, ',', '),RTRIM(') + ') FROM ' 
        + DB_NAME() + '..' + @table + '" queryout "' + @filename + '" -c -T''';  

    EXEC sp_executesql @sql;
  END
  ELSE
  BEGIN
    SELECT 'The table '+@table+' does not exist in the database';
  END
END

GO

je vous remercie beaucoup pour votre aide et vos conseils!!

Ré-écrire cette ligne comme SET @FileLocation='C:\test\'+@TableName+convert(varchar(20),@StartDT)+'.csv'
Essayez de réduire votre code de quelques lignes que vraiment le cœur du problème et ne nécessitent pas de tous les appels à des procédures externes. On peut ensuite essayer d'exécuter le code, pour nous-mêmes. Si je vais à déboguer ce que je veux quelque chose, je peux copier+coller dans SSMS et de l'exécuter sans aucune erreurs, manque de tables, de manque de procédures stockées, etc. En d'autres termes, de faire une simple, autonome exemple qui reproduit votre erreur.
essayez de modifier cette trop SET @StartDT = DATEADD(month,1,@StartDT)
J'ai une réponse, et DONC les erreurs à chaque fois que j'essaie de poster... Ce code, tel qu'il est, fonctionne pour moi. Les dates des trucs fonctionne très bien @CoDeaDDict, et les fichiers sont tous créés avec les mêmes données (le contenu de la table envoyé dans la procédure stockée). Êtes-vous sûr que vous utilisez le code que vous avez donné?
Quand j'ai remplacer "SELECT @MinDOS = '20110101'" "MIN(dos) DE accn_demographics", j'obtiens le résultat souhaité, de sorte que vous pouvez commencer par regarder la valeur retournée par accn_demographics.

OriginalL'auteur l--''''''---------'''''''''''' | 2012-06-14