Как я могу вернуть данные из строк, на которые влияет инструкция UPDATE, используя ODBC в C , когда активен триггер ОБНОВЛЕНИЯ?

#c #sql-server #sql-update #odbc

#c #sql-server #sql-обновление #odbc

Вопрос:

Мне нужно получить данные во всех строках, на которые влияет оператор обновления SQL, используя ODBC. Исторически я делал аналогично следующему:

 // execute statement (assume handle created, parameters bound, etc.)
SQLExecDirect(hStmt, "UPDATE some_table SET some_field = ? OUTPUT inserted.* WHERE some_other_field = ?;", SQL_NTS);

// do something with each affected row
while (SQLFetch(hStmt) != SQL_NO_DATA) do_something();
 

И это работает достаточно хорошо, за исключением…

…оператор UPDATE с выводом завершается с ошибкой, если включен триггер ОБНОВЛЕНИЯ some_table . Я читал, что это можно преодолеть, используя OUTPUT ... INTO для помещения результатов в табличную переменную. Хотя это достаточно просто непосредственно в SQL Server, я не могу понять, как это сделать через ODBC с помощью кода C .

Как это сделать?

Комментарии:

1. Вы должны иметь возможность добавлять объявление таблицы перед UPDATE , добавлять OUTPUT...INTO предложение и выбирать из табличной переменной после обновления.

2. Да. Это делает. Спасибо.

Ответ №1:

Область действия табличной переменной ограничена текущим пакетом, поэтому вы можете выполнить пакет с несколькими операторами, как показано ниже.

  1. добавьте объявление таблицы перед UPDATE
  2. добавьте OUTPUT...INTO clause
  3. выберите из табличной переменной после обновления, чтобы вернуть результирующий набор