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 );
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?
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') );
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?