#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:
Область действия табличной переменной ограничена текущим пакетом, поэтому вы можете выполнить пакет с несколькими операторами, как показано ниже.
- добавьте объявление таблицы перед
UPDATE
- добавьте
OUTPUT...INTO clause
- выберите из табличной переменной после обновления, чтобы вернуть результирующий набор