✅ کد اصلی
/*
FileName ba batch file convert shavad ...
*/
USE [DB_Ejraeiyaat2025]
GO
-- OPENROWSET فعالسازی تنظیمات لازم برای
EXEC sp_configure 'show advanced options', 1;
RECONFIGURE;
EXEC sp_configure 'Ad Hoc Distributed Queries', 1;
RECONFIGURE;
DECLARE @FolderPath NVARCHAR(MAX);
DECLARE @ExcelFullPath NVARCHAR(MAX);
DECLARE @sqlFIELDS NVARCHAR(MAX); -- RWSHID, ....
DECLARE @sqlWHEREStatement NVARCHAR(MAX);
DECLARE @StartTime DATETIME2 = SYSDATETIME();
SET @FolderPath = N'E:\- PowerBI\1404-01-30\Data4Import\08-Taghsit\';
SET @sqlFIELDS = N'ROW_NUMBER() OVER (ORDER BY ORD_ORDNO) AS RowNum, * ';
SET @sqlWHEREStatement = N'WHERE ORD_ORDNO IS NOT NULL';
/*
SET @sqlFIELDS = N'
ROW_NUMBER() OVER (ORDER BY RWSHID) AS RowNum, RWSHID, RWSHNAME, ACTIVITYCODE, WSHSTATUSDESC, NATIONDESC,
ACTPERIODDESC, WSHCHARDESC, WSHRATEDESC, ACTIVITYDESC, WSHTYPEDESC, DIRECTORORGDESC, RECOGMETHODDESC,
SNDLISTPERIODDESC, SNDLISTMETHODDESC, BRHNAME, BLD_MANG';
*/
-- مرحله 1: حذف جدول موقت اگه از قبل وجود داره
IF OBJECT_ID('tempdb..#MyExcelFiles') IS NOT NULL
DROP TABLE #MyExcelFiles;
-- مرحله 2: ایجاد جدول موقت
CREATE TABLE #MyExcelFiles (FileName NVARCHAR(1000));
-- مرحله 3: پر کردن جدول موقت با لیست فایلها
EXEC dbo.WriteExcelFileListToTable
@FolderPath,
@TableName = N'#MyExcelFiles';
-- مرحله 4: تعریف متغیر برای نگهداری فایل جاری
DECLARE @CurrentFile NVARCHAR(1000);
-- cursor مرحله 5: تعریف
DECLARE file_cursor CURSOR FOR
SELECT FileName FROM #MyExcelFiles;
--و خواندن سطر اول cursor مرحله 6: باز کردن
OPEN file_cursor;
FETCH NEXT FROM file_cursor INTO @CurrentFile;
-- مرحله 7: حلقه روی فایلها
WHILE @@FETCH_STATUS = 0
BEGIN
PRINT '';
PRINT '================================================= ================================================== ======================';
DECLARE @Msg NVARCHAR(MAX);
SET @Msg = N'✅ [--- NEXT --- Processing file: ' + @CurrentFile + ']';
RAISERROR(@Msg, 10, 1) WITH NOWAIT;
SET @ExcelFullPath = @FolderPath+@CurrentFile;
EXEC dbo.ProcessExcelData @ExcelFullPath, @sqlFIELDS, @sqlWHEREStatement
WAITFOR DELAY '00:00:02';
-- خواندن فایل بعدی
FETCH NEXT FROM file_cursor INTO @CurrentFile;
END
-- cursor مرحله 8: بستن و آزادسازی
CLOSE file_cursor;
DEALLOCATE file_cursor;
DECLARE @EndTime DATETIME2 = SYSDATETIME();
DECLARE @ElapsedSeconds INT = DATEDIFF(SECOND, @StartTime, @EndTime);
PRINT '⏱ ALL Time elapsed: ' + CAST(@ElapsedSeconds AS NVARCHAR) + ' seconds';