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