Sperrtabelle mit Transaktion in ODBCC++

Programme in C++. Entwicklerforum
Guest
 Sperrtabelle mit Transaktion in ODBC

Post by Guest »

Code: Select all

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 );
(Fehlerprüfung und Vorbereitung aus Gründen der Übersichtlichkeit weggelassen)
Ich habe ein paar Fragen zum obigen Code.
  • Für den Zeitraum dieser Transaktion muss gesperrt sein, damit kein Lese-/Schreibzugriff möglich ist.
    Wie kann ich das tun?
  • Ich glaube, ich benötige eine Transaktion. Liege ich mit der Abfrage der INSERT-Anweisung richtig?
  • Soll ich in der Transaktion zwei Abfragen durchführen und dabei die Datensatzüberprüfung und die tatsächliche Einfügung aufteilen?
Das versuche ich zu erreichen (basierend auf der Antwort von @ DaleK):

Code: Select all

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') );
Ich erhalte jedoch die folgenden Fehlermeldungen:

Msg 102, Level 15, State 1, Line 2

Falsche Syntax in der Nähe von „,“.

Msg 156, Ebene 15, Status 1, Zeile 3

Falsche Syntax in der Nähe des Schlüsselworts 'WHERE'.

Msg 102, Level 15, State 1, Line 3

Falsche Syntax in der Nähe von ')'.

Ich denke, nur das erste ist relevant – es ist SELECT( 0,.
Irgendeine Idee, was man hier tun kann?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post