Я решил эту проблему, выполнив следующие шаги:
1) Создайте пользовательский тип таблицы в базе данных:
CREATE TYPE [dbo].[MyTableType] AS TABLE(
[UPDATE_ID] NVARCHAR(255),
[MY_COLUMN] NVARCHAR(255)
)
2) Создайте хранимую процедуру, содержащую ранее созданный тип таблицыи запрос на обновление:
CREATE procedure UpdateDB
@myTableType MyTableType readonly
AS
BEGIN
UPDATE TIS SET TIS.MY_COLUMN = TISX.MY_COLUMN
FROM dbo.TEST_INPUT_SIMPLE TIS INNER JOIN @myTableType AS TISX
ON TIS.UPDATE_ID = TISX.UPDATE_ID
END
3) С помощью задачи сценария VB извлеките данные Excel и запустите хранимую процедуру:
Public Sub Main()
Dim fileToTest As String
Dim SheetName As String
Dim connectionString As String
Dim excelConnection As OleDbConnection
Dim excelCommand As OleDbCommand
Dim ODA As OleDbDataAdapter
Dim dtExcel As New DataTable()
Dim SQLConn As SqlClient.SqlConnection
Dim SQLCmd As SqlClient.SqlCommand
'open a connection to the excel file'
fileToTest = "C:\Users\testuser\Documents\test\mytestfile.xls"
connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=" &
fileToTest & ";Extended Properties=""Excel 8.0;HDR=YES;IMEX=1"""
excelConnection = New OleDbConnection(connectionString)
excelConnection.Open()
'open a SQL connection to the LRPSF_Source_DB SQL Server DB'
connectionString = "Data Source=mysqlserver.net\sqlentdb1d;Trusted_Connection=True;DATABASE=LRPSF_Source_DB;CONNECTION RESET=FALSE"
SQLConn = New SqlClient.SqlConnection(connectionString)
SQLConn.Open()
'fetch the data from TEST table in Excel file using a command query and store in datatable object'
SheetName = "TEST$"
excelCommand = excelConnection.CreateCommand()
excelCommand.CommandText = "SELECT * FROM [" & SheetName & "]"
excelCommand.CommandType = CommandType.Text
ODA = New OleDbDataAdapter(excelCommand)
ODA.Fill(dtExcel) 'object is filled with Excel data'
'load the dtExcel object into @myTableType object and run the stored procedure'
SQLCmd = SQLConn.CreateCommand()
SQLCmd.CommandText = "[dbo].[UpdateDB]"
SQLCmd.CommandType = CommandType.StoredProcedure
SQLCmd.Parameters.AddWithValue("@myTableType", dtExcel)
SQLCmd.ExecuteNonQuery() 'run the stored procedure containing the update query'
Dts.TaskResult = ScriptResults.Success
End Sub
Спасибо за помощь!