我的開發環境是PB11.5+SQL Server 2000。有兩個資料庫,其中的部分表的資料要求保持一致。
一個很簡單的陳述句:
insert openrowset('sqloledb','Server Name';'username';'password',databasename.dbo.tablename)
select * from tb_tablename
在查詢分析器里可以成功運行。
但是在PB11.5中:
string ls_sql
ls_sql="insert openrowset "&
+" ('sqloledb','Server Name';'username;'password',databasename.dbo.tablename) "&
+" select * from tb_tablename"
execute immediate :ls_sql using sqlca;
這樣執行的時候就會報錯:新事務不能登記到指定的事務管理器中。
最奇怪的是:
ls_sql="delete from openrowset "&
+" ('sqloledb','Server Name';'username;'password',databasename.dbo.tablename) "&
+" where id not in (select id from tablename)"
execute immediate :ls_sql using gta_server;
這樣還是能夠正常執行的。
真是很納悶,為什么洗掉的代碼可以執行,而插入的代碼不能執行,請大大們指教。
uj5u.com熱心網友回復:
你把里面的單引號去掉看看?uj5u.com熱心網友回復:
執行前autocommit 設為 truesqlca.autocommit = true
string ls_sql
ls_sql="insert openrowset "&
+" ('sqloledb','Server Name';'username;'password',databasename.dbo.tablename) "&
+" select * from tb_tablename"
execute immediate :ls_sql using sqlca;
sqlca.autocommit = false
uj5u.com熱心網友回復:
欄位名字之間為什么是 分號?另外 delete 陳述句是可以不指定欄位名的。
uj5u.com熱心網友回復:
問題基本解決。謝謝各位。轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/78037.html
標籤:數據庫相關
