Код: Выделить всё
ret = SQLExecDirect( stmt2, "BEGIN", SQL_NTS );
ret = SQLTables( stmt1 );
for( SQLFetch( stmt1 ); ; SQLFetch( stmt1 ) )
{
// get catalog
// get schema
// get table
ret = SQLExecDirect( stmt2, "IF NOT EXIST( SELECT * FROM WHERE name = AND schema = ) INSERT INTO VALUES( , , .... )", SQL_NTS );
}
ret = SQLExecDirect( stmt2, "COMMIT", SQL_NTS );
У меня есть пара вопросов относительно приведенного выше кода.
- На период этой транзакции мне нужно, чтобы была заблокирована, чтобы невозможно было выполнить чтение/запись.
Как я могу это сделать? - Думаю, мне нужна одна транзакция. Правильно ли я делаю это с помощью запроса оператора INSERT?
- Должен ли я сделать 2 запроса в транзакции, разделив проверку записи и фактическую вставку?
Код: Выделить всё
INSERT INTO my_table SELECT( 0, 'abcatcol', (SELECT object_id FROM
sys.objects o, sys.schemas s WHERE s.schema_id = o.schema_id AND o.name =
'abcatcol' AND s.name = 'dbo')
WHERE NOT EXISTS(SELECT * FROM my_table WHERE abt_tnam='abcatcol' AND abt_ownr='dbo') );
Сообщение 102, уровень 15, состояние 1, строка 2
Неправильный синтаксис рядом с ','.
Сообщение 156, уровень 15, состояние 1, строка 3
Неправильный синтаксис рядом с ключевым словом 'WHERE'.
Сообщение 102, уровень 15, состояние 1, строка 3
Неправильный синтаксис рядом с ')'.
Я думаю, что только первый из них имеет значение — это SELECT( 0,.
Есть идеи, что здесь делать?
Подробнее здесь: https://stackoverflow.com/questions/793 ... on-in-odbc
Мобильная версия