Я использую следующую хранимую процедуру, чтобы взять несколько файлов Excel, расположенных в одном каталоге, и загрузить (добавить / вставить) в TestTable через сопоставления столбцов. Импорт работает, но теперь я хотел бы вывести в файл журнала, где количество импортированных записей из каждого загружаемого файла будет подсчитываться и отражаться в файле. Если загрузка из одного из файлов не удалась (при условии, что путь к файлу и имя файла по-прежнему верны), вывод в файле журнала должен, например, сказать:
Import C NOT OK: [fail reason]; check C:\Directory\Quantities\ERROR\TestFileC.xlsx
Необработанный файл должен быть перемещен в другой каталог, как указано выше ...
DECLARE @Path VARCHAR(2000)
DECLARE @Txt VARCHAR(2000)
DECLARE @YYYY INT
DECLARE @MM INT
DECLARE @DD INT
DECLARE @YYYY_Txt VARCHAR(2000)
DECLARE @MM_Txt VARCHAR(2000)
DECLARE @DD_Txt VARCHAR(2000)
DECLARE @DateStamp VARCHAR(2000)
SET @YYYY = DATEPART(yy,GETDATE())
SET @YYYY_Txt = CAST(@YYYY AS VARCHAR(2000))
SET @MM = DATEPART(mm,GETDATE())
SET @MM_Txt = CAST(@MM AS VARCHAR(2000))
SET @DD = DATEPART(dd,GETDATE())
SET @DD_Txt = CAST(@DD AS VARCHAR(2000))
SET @DateStamp = @YYYY_Txt + '_' + @MM_Txt + '_' + @DD_Txt
SET @Path = 'C:\Directory\Quantities\Logs\importLog_' + @DateStamp + '.txt'
--------------------------------------------------------------------------------------
USE TEST_DB;
--TEST A--
GO
INSERT INTO [dbo].[TestTable] ([Column_A], [Column_B], [Column_C], [Column_D])
SELECT A.[Int# Q1 (A)], A.[Int# Q2 (B)], A.[Int# Q3 (C)], A.[Int# Q4 (D)] FROM OPENROWSET
('Microsoft.ACE.OLEDB.12.0', 'Excel 12.0;Database=C:\Directory\Quantities\TestFileA.xlsx;HDR=YES', 'select * from [Sheet$]') AS A;
SET @Txt = 'Import A OK'
EXEC WriteToFile @Path, @Txt
GO
--TEST B--
INSERT INTO [dbo].[TestTable] ([Column_A], [Column_B], [Column_C], [Column_D])
SELECT B.[Int# Q1 (A)], B.[Int# Q2 (B)], B.[Int# Q3 (C)], B.[Int# Q4 (D)] FROM OPENROWSET
('Microsoft.ACE.OLEDB.12.0', 'Excel 12.0;Database=C:\Directory\Quantities\TestFileB.xlsx;HDR=YES', 'select * from [Sheet$]') AS B;
SET @Txt = 'Import B OK'
EXEC WriteToFile @Path, @Txt
GO
--TEST C--
INSERT INTO [dbo].[TestTable] ([Column_A], [Column_B], [Column_C], [Column_D])
SELECT C.[Int# Q1 (A)], C.[Int# Q2 (B)], C.[Int# Q3 (C)], C.[Int# Q4 (D)] FROM OPENROWSET
('Microsoft.ACE.OLEDB.12.0', 'Excel 12.0;Database=C:\Directory\Quantities\TestFileC.xlsx;HDR=YES', 'select * from [Sheet$]') AS C;
SET @Txt = 'Import C NOT OK'
EXEC WriteToFile @Path, @Txt
GO
Окончательный вывод файла журнала может выглядеть примерно так:
Import A OK: 100 records
Import B OK: 200 records
Import C NOT OK: [fail reason]; check C:\Directory\Quantities\ERROR\TestFileC.xlsx
Не могли бы вы помочь мне изменить мою процедуру и сообщить, как я могу решить эту проблему? В настоящее время файл importLog с отметкой времени даже не создается на данный момент ... Я использую MS SQL Server - большое спасибо заранее!