मेरे लिए ठीक काम करने लगता है। मेरे पास कुछ सुझाव हैं:
(1) तारीख बनाने के लिए वह सभी स्ट्रिंग कॉन्सटेनेशन करना बंद करें। आप वही काम बहुत आसान तरीके से कर सकते हैं जैसे:
SELECT @StartDT = DATEADD(MONTH, DATEDIFF(MONTH, '19000101', @MinDOS), '19000101');
(2) varchar
घोषित करना बंद करें बिना लंबाई के। और सही आउटपुट सुनिश्चित करने के लिए, मैं कनवर्ट करना पसंद करता हूं:
SET @FileLocation = 'C:\test\' + @TableName
+ CONVERT(CHAR(10), @StartDT, 120) + '.csv';
(3) संग्रहीत प्रक्रिया को चलाकर और फ़ोल्डर में आउटपुट का निरीक्षण करके कोड को "डीबगिंग" करने के बजाय, पहले अपने इनपुट की विवेक-जांच क्यों न करें? साथ ही, दिनांक के लिए दो चरों का उपयोग क्यों करें?
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