Có vẻ làm việc tốt cho tôi. Tôi có một vài gợi ý:
(1) ngừng thực hiện tất cả việc nối chuỗi đó để tạo ngày tháng. Bạn có thể làm điều tương tự dễ dàng hơn nhiều như trong:
SELECT @StartDT = DATEADD(MONTH, DATEDIFF(MONTH, '19000101', @MinDOS), '19000101');
(2) ngừng khai báo varchar
không có chiều dài. Và để đảm bảo đầu ra phù hợp, tôi thích chuyển đổi:
SET @FileLocation = 'C:\test\' + @TableName
+ CONVERT(CHAR(10), @StartDT, 120) + '.csv';
(3) thay vì "gỡ lỗi" mã bằng cách chạy quy trình được lưu trữ và kiểm tra kết quả đầu ra trong thư mục, tại sao không kiểm tra thông tin đầu vào của bạn trước tiên? Ngoài ra, tại sao lại sử dụng hai biến cho ngày?
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