#sql-server #ssis
Вопрос:
У меня есть файл excel, в котором есть столбец, и данные в этом столбце :
INSERT INTO dbo.Test (Id1, Id2, Id3)
VALUES (1, 2, 3)
Может ли кто-нибудь, пожалуйста, сообщить мне, как я могу автоматизировать это с помощью служб SSIS, чтобы инструкция insert напрямую загружала данные в таблицу?
Я могу создать пакет SSIS для загрузки этого файла excel в таблицу, однако мне нужен столбец для выполнения и вставки данных в тестовую таблицу.
Любые предложения были бы полезны.
Спасибо
Комментарии:
1. Вы не должны хранить SQL-скрипт в столбце, вы должны просто хранить значения. В этом случае в ячейках A1:C1 должно быть значение
ID1
,ID2
, иID3
соответственно, а в ячейках A2:C2 должны быть значения1
,2
, и3
соответственно. Затем импорт данных из исходного кода Excel является тривиальным.2. Зачем все усложнять? Если ваш «сценарий» (эта единственная инструкция insert) — это все, что у вас есть, просто поместите его в файл сценария, где вы можете запустить его в любой базе данных в любое время, используя различные инструменты. Это похоже на проблему XY .
3. Если вы хотите автоматизировать сценарий SQL, powershell является популярным инструментом для таких задач; загрузка данных из Excel проста, но это должны быть просто данные , что произойдет, если кто-то отредактирует файл excel и изменит содержимое ячейки на «выпадающую таблицу….» или хуже?
4. Было бы правильно сформулировать проблему следующим образом: В контексте пакета SSIS мне нужно прочитать определенную ячейку в файле Excel в виде строки. Затем мне нужно использовать эту строку в качестве запроса к базе данных?
5. Существует так много различных способов сделать это, однако считаете ли вы, что позволить какому-либо пользователю Excel передать запрос для слепого запуска на производственном сервере-хорошая идея?
Ответ №1:
Итак, как я понимаю, у вас уже есть полный пакет SSIS с подключением к excel и подключением к базе данных и, наконец, также с преобразованием в конвейере (захват данных из источника, передача их в пункт назначения).
Существуют различные способы выполнения пакета SSIS из SQL Server (например, bat или cmd), но я предлагаю вам официальный.
Вы можете найти полное пошаговое руководство по развертыванию служб SSIS на SQL Server здесь : https://docs.microsoft.com/en-us/sql/integration-services/packages/deploy-integration-services-ssis-projects-and-packages?view=sql-server-ver15
В принципе, щелкните правой кнопкой мыши в Visual studio по проекту и выберите «Развернуть»… Выполните следующие действия…
Взгляните сюда: https://docs.microsoft.com/en-us/sql/integration-services/packages/deploy-integration-services-ssis-projects-and-packages?view=sql-server-ver15#to-deploy-and-execute-a-package-using-stored-procedures Существует пошаговое руководство по запуску пакета служб SSIS из хранимой процедуры.
Теперь вам нужно решить, как автоматизировать запуск самой хранимой процедуры. Также здесь у вас есть так много подходов, например, ваша собственная реализация таймера за пределами SQL Server или использование планировщика задач Windows.
Поскольку я на самом деле не знаю вашу среду, я предлагаю вам простой способ создания запланированного задания с помощью агента SQL Server (он должен быть установлен в вашем экземпляре SQL Server).
пошаговое руководство находится здесь: https://docs.microsoft.com/en-us/sql/ssms/agent/create-a-job?view=sql-server-ver15
Комментарии:
1. Привет, Матей, большое спасибо за ответ. Извините, если я не понял, мой вопрос заключается в том, что в одном из столбцов файла excel есть оператор SQL Insert. Как мне запустить это утверждение, чтобы данные были вставлены? Мой пакет SSIS в основном получит этот столбец и введет его в таблицу, однако я хочу, чтобы была выполнена инструкция insert из столбца excel и данные были загружены в таблицу
2. Привет, Джон, кажется, теперь я это понимаю. Существует также несколько вариантов в SSIS, но также и без SSIS. 1. Итак, сделайте в точности то, что я сказал вам в своем ответе разделите подход на 2 шага. Вставьте также столбец, содержащий ваши инструкции insert. Например, вы также можете создать другую «промежуточную таблицу» для этих данных. Затем создайте другую хранимую процедуру, которая также будет выполняться из задания после первой. Затем вы можете использовать sp_executesql с SQL SERVER и просто установить команду sql и выполнить ее внутри вашего SP… например, @_sqlcmd varchar(255) = выберите cmd из таблицы stagingTable выполнить sp_executesql @_sqlcmd
3. Но я должен также сказать вам, что есть что-то странное в том, что вы должны читать инструкции sql из ячейки excel… Всегда лучше правильно хранить данные и правильно выполнять конвейер служб SSIS.
4. Привет, Матей, я понимаю, что это странное требование, но пока мне приходится с ним жить. Итак, я создал промежуточную таблицу dbo.stg, в которой есть столбец с именем «Сценарий», и в этом столбце у меня есть инструкция insert. Не могли бы вы,пожалуйста,помочь мне с вопросом о том, как я могу разделить столбец «Сценарий», чтобы загрузить эту вставку в 3 разных столбца в dbo.test, таких как ID1, ID2, ID3
5. Например(если ваша таблица содержит несколько строк, сделайте это, например, циклически (курсором или во время)): объявите @_sqlcommand varchar(255) = (выберите сценарий из dbo.stg) exec sp_executesql @_sqlcommand … Вся команда находится в скрипте ячейки… Ofc, используйте больше, чем varchar(255), если команда длиннее