Достъп с Microsoft SQL Server – Импортиране на големи набори от данни с помощта на SSIS
Умиране със заявка за вмъкване на достъп
Ако някога сте се опитвали да вмъкнете голямо количество записи в SQL Server с помощта на заявка за вмъкване на Access (15 000 записа или повече), чакате дълго, говорихме за почивка за кафе тук (от няколко минути до 15). Това може дори да доведе до блокиране на вашата база данни, ако наборът от данни е твърде голям. И така, какви опции имате?
XML е страхотен първи опит
Един от методите, които обикновено използваме в нашия код, е да работим с XML данни, няма да навлизам в подробности за това тук, но ето линк, който е написал мой колега. Той обхваща серия от 2 части, която обсъжда работата с XML данни с бекенд на SQL Server.
XML е чудесен инструмент за изпробване, но дори и това може да не е достатъчно бързо с набори от данни, наброяващи 10 000. Предимството на XML пред SSIS заданието обаче би било, че SSIS заданието изисква мрежова папка, до която могат да достигнат всички потребители на Access и сървъра. Това няма да работи добре в интернет (сценарият, за който XML методът е създаден първоначално).
SSIS е супер бърз
Това, което искам да споделя с вас тук, е за моя опит в работата с SQL Server Integration Services. Имахме клиент, чиято база данни вече използва метода XML за качване на данните в SQL сървър, но тъй като данните, които импортираха, имаха над 700 000 реда данни, отнемаха 20 минути за завършване на процеса. Това очевидно отнема твърде много време за заета компания, която трябва да използва този метод ежедневно. Нашето решение беше да премахнем Access от процеса на качване, като създадем задание, което ще прочете CSV файла директно от местоположението на файла и ще импортира данните в таблицата на SQL Server с помощта на прост T-SQL скрипт.
Достъпът само стартира процеса
Потребителите ще изберат своя файл с данни в Access и ще въведат всяка друга необходима информация, като например дата и ще щракнат върху бутона за обработка. Първата стъпка от vba кода би била да се съхрани името на файла и пътя към таблица в SQL Server.
'Add import file name to Application
ExecuteMyCommand "UPDATE Application SET SSISDataImportFile = " & PrepareSQLString(Me.txtFileInput)
Ето vba кода, използван за изпълнение на задачата SSIS.
Public Function ImportData()
On Error GoTo ImportData_Err
Dim rs As ADODB.Recordset
Dim strSQL As String
„Добавете код за активиране на SSIS пакет
strSQL =“EXEC dbo.uspSSISFileDataImport”
OpenMyRecordset rs, strSQL, rrOpenForwardOnly, rrLockReadOnly, True
„Следното повтаря процедура, за да провери дали заданието е завършено.
strSQL =“EXEC dbo.uspSSISFileDataImportProcess”
OpenMyRecordset rs, strSQL, rrOpenForwardOnly, rrLockReadOnly, True
Правете до rs.Fields(0) =4 And Not IsNull(rs.Fields(3))
strSQL =“EXEC dbo.uspSSISFileDataImportProcess”
OpenMyRecordset rs, strSQL, rrOpenForwardOnly, rrLockReadOnly /,> Цикъл
ImportData_Exit:
Задайте rs =Нищо
Изходна функция
ImportData_Err:
MsgBox Err.Description
Resume ImportData_Exit
Resume ‘за отстраняване на грешки
Крайна функция
CREATE PROCEDURE [dbo].[uspFileDataImport]
AS
BEGIN
SET NOCOUNT ON;
EXECUTE msdb.dbo.sp_start_job @Job_name =N’SSISDataImport’;
END;
CREATE PROCEDURE [dbo].[uspSSISFileDataImportProcess]
AS
BEGIN
SET NOCOUNT ON;
DECLARE
@execution_id INT,
@JobStatusID INT,
@JobStatus Varchar(250),
@StartTime DATETIME2,
@EndTime DATETIME2;
ИЗЧАКВАНЕ НА ЗАБАВАНЕ ’00:00:03′;
SELECT @execution_id=MAX ([execution_id])
ОТ [SSISDB].[вътрешни].[изпълнения];
SELECT
@JobStatusID =e.executable_id,
@JobStatus =e.executable_name,
@StartTime =s.start_time,
@EndTime =s.end_time
ОТ SSISDB .internal.executables AS e
LEFT JOIN SSISDB.internal.executable_statistics AS s
ON e.executable_id =s.executable_id И s.execution_id =@execution_id;
SELECT @JobStatusID, @JobStatus, @StartTime, @EndTime;
END;
Тази съхранена процедура ще изпълнява проста работа със следния дизайн.
Вземете параметри – Това е прост T-SQL скрипт, който избира името и пътя на файла от sql таблицата и присвоява стойностите на съответните параметри. ИЗБЕРЕТЕ SSISDataImportFile ОТ tblApplicationSettings; Името на файла ще се различава от ден на ден, така че използването на параметър беше начинът, името на файла се въвежда в необвързан обект във формуляра за достъп, след което с VBA кодирането се записва в SQL таблица, позволявайки на пакета да прочете това от SQL таблица (вижте кода по-горе).
Отрежете днешните данни – Прост T-SQL скрипт за премахване на всички съществуващи данни в таблицата за временно импортиране, преминаване през записите, за да направите промени или актуализации. Може да се наложи първо да импортирате данните във временна таблица, в случай че трябва да проверите данните или да направите допълнителни промени в данните, преди да ги съхраните в постоянната таблица.
Задача за поток от данни – Обяснено в следващия раздел.
Източник на плосък файл – Използвайки параметрите от първата стъпка, заданието може да получи достъп до текстовия файл.
Файлът трябва да се съхранява в мрежово устройство или папка, достъпна от сървъра.
ОЛЕ DB Дестинация – Тази последна стъпка от работата е процесът, който импортира данните в таблицата на SQL Server. Тук можете да идентифицирате връзката към базата данни и името на таблицата. Също така е мястото, където ще картографирате полетата от текстовия файл към полетата на местоназначението в таблицата.
Накрая създадох съхранената процедура за връщане на executionID. Целта тук е, че съхранената процедура няма да излезе, докато заданието не приключи, предотвратявайки VBA кода на Microsoft Access да продължи, докато заданието не приключи. Идеята на работата е просто да вкарате данните в таблица на SQL Server и веднъж там можете да правите всякакви модификации на данните чрез Access и накрая да съхранявате данните в постоянната таблица.
От 20 минути надолу до 3!
Нашият клиент беше супер доволен от резултатите, възможността да използвам страхотната технология на SQL Server във връзка с Access ми позволява да направя големи крачки в ефективността в работата си, нямам търпение да опитам това отново скоро!
Присъединете се към Сюзън Пайн следващия вторник, 12 февруари, докато тя обсъжда как да шифровате колони в SQL Server, като кредитни карти и социалноосигурителни номера, и как да ги дешифрирате за показване в Access, чудесно за защита на ценни данни! За да научите повече, моля, посетете https://buff.ly/2I7BPii #MSAccess @MSAccess #Encryption