Я использую VBA adodb для записи INSERT
операторов в SQL Server на основе содержимого строки Excel.
Я использую параметризованные запросы, поэтому мой код VBA имеет следующую форму:
sqlStatement = "INSERT INTO dbo.mytable (" & Join(insertElement(0), ", ") & ") VALUES (" & Join(insertElement(2), ", ") & ")"
Set cm = New ADODB.Command
With cm
Debug.Print (sqlStatement)
.ActiveConnection = conn
.CommandText = sqlStatement
.CommandType = adCmdText
For Each e In insertElement(1)
Set Pm = .CreateParameter(, adVarChar, 3, 1024, e)
.Parameters.Append Pm
Next e
Set rs = .Execute
End With
, где insertElement(0)
- это массив имен полей, ... (1) - это массив значений, а ... (2) - массив заполнителей ?
для поддержки параметризации
Когда я запускаю этот код, я получаю сообщение об ошибке
[Microsoft] [Драйвер ODBC 13 для SQL Server] [SQL Server] Неверный синтаксис рядом с «Выходными данными»
Однако, когда я запрашиваю текст sqlStatement
, нигде в выражении нет «Вывода». Текст имеет вид:
INSERT INTO dbo.mytable ([my_field_1],[my_field_2],[somefieldshaveweirdcharslike+#], ...) VALUES (?, ?, ?, ...)
Итак, если я не предоставляю команду «Вывод» напрямую и не могу непосредственно увидеть оператор, потому что он обрабатывается на стороне сервера, как я могу диагностировать синтаксис?