Вставка значений в таблицу SQL Server через VBA

Предположим, что у меня есть таблица в Excel с двумя столбцами (Name, Rate) (скажем, имя этой таблицы tExcel ). Таблица начинается с ячейки (2,1), а дата статична (в ячейке (1,1))

Я хочу вставить эти значения в таблицу tRate SQL Server 2008 со следующей логикой

 insert tRate(ID, Rate, Date) select s.ObjectID, e.Rate, Date -- date comes from cell(1,1). DateType is smalldatetime from tExcel e, tSecurity s where e.Name = s.Number 

Я создал соединение

 Sub disp_cust() Dim adoCN As ADODB.Connection Dim sConnString As String Dim sSQL As String Dim lRow As Long, lCol As Long Set cn = New ADODB.Connection sConnString = "Provider=sqloledb;Server=xxx;Database=xxx;User Id=xxx;Password=xxx" Set adoCN = CreateObject("ADODB.Connection") adoCN.Open sConnString adoCN.Close Set adoCN = Nothing End Sub 

Спасибо за помощь.

EDIT для @jaimetotal ответа

 sql= "insert tRate(ID, Rate, Date) SELECT s.ObjectId ," & Replace(Row.Cells(2).Value, ",", ".") & ",'" & defaultDate & "' FROM tSecurity s where s.number = '" & row.Cells(1).Value & "'; " 

Для этого примера я предполагаю, что tExcel.Number – это первый столбец, а tExcel.Rate – второй. Идея здесь состоит в том, чтобы сделать a для каждой строки в таблице (или диапазоне) и создать инструкцию insert / select.

 Dim rng as Range Dim defaultDate As string Dim sql as string, bulkSql as string Set rng = Range("A1:XX") -- Range of the table. defaultDate = Format(Range("A2").Value, "yyyy/mm/dd") bulkSql = "" 'generated sample: insert tRate(ID, Rate, Date) SELECT s.ObjectId, '0.15', '2015/08/24' FROM tSecurity s where s.Number = '007' For Each row In rng.Rows sql= "insert tRate(ID, Rate, Date) SELECT s.ObjectId " & "','" & row.Cells(2).Value & "','" & defaultDate & "' FROM tSecurity s where s.number = '" & row.Cells(1).Value & "'; " bulkSql = bulkSql & sql Next row adoCn.Execute bulkSql, , adCmdText 

Изменить: если вы действительно имеете в виду таблицу, то вы можете использовать этот образец, основанный здесь .

 Dim lo As Excel.ListObject Dim ws As Excel.Worksheet Dim lr As Excel.ListRow Set ws = ThisWorkbook.Worksheets(1) Set lo = ws.ListObjects("tExcel") 'The other code from the previous sample. Use the following ForEach instead For Each lr In lo.ListRows Dim Rate as String Dim Number as String Rate = Intersect(lr.Range, lo.ListColumns("Rate").Range).Value Number = Intersect(lr.Range, lo.ListColumns("Number").Range).Value 'Generate the query from these values instead Next lr 
Давайте будем гением компьютера.