Teradat 14 .NET プロバイダーを使用しています。単一のトランザクションで次の SQL を実行したい:
delete mydb.mytable;
insert into mydb.mytable select * from mydb.myothertable;
私が遭遇したこの問題は、削除は瞬時に行われますが、挿入には数秒かかるということです。削除の後、挿入がコミットされる前に (挿入が実行される前ではなく) 選択が行われた場合、行は返されません。SELECT
したがって、トランザクションがコミットされるまで、 両方のステートメントの結果が他のステートメントから見えるようにしたくありません。IsolationLevel.Snapshot
私が望むものに最もよく一致する説明があります:
Reduces blocking by storing a version of data that one application can read while another is modifying the same data. Indicates that from one transaction you cannot see changes made in other transactions, even if you requery.
問題は、Teradata 14 がこのタイプのトランザクションをサポートしていないように見えることです。
The isolation level is not supported by this version of Teradata Database.
トランザクションがコミットされるまで、 delete
andの結果がinsert
他のステートメントから見えないようにするにはどうすればよいですか?select
編集
dnoethの回答の後に使用しているコードは次のとおりです。私は Teradata セッションを使用しており、すべての SQL を単一の文字列に入れていますが、削除後、挿入が完了する前に選択が行われた場合、結果は返されません。あなたが提案したように私はそれをやっていますか?SQL でTdTransaction
実行しているため、オブジェクトがないことに注意してください。bt;et;
Using con As TdConnection = GetNewConnection()
Using cmd As TdCommand = con.CreateCommand
cmd.CommandText = "bt;delete mydb.mytable;insert into mydb.mytable select * from mydb.myview;et;"
cmd.ExecuteNonQuery()
End Using
End Using