使用ODBC显式锁定和解锁表

时间:2017-10-23 09:51:27

标签: c++ sql sql-server odbc

我必须使用存储在MSSQL Server数据库中的数据执行一些计算,然后将结果保存在同一个数据库中。

我需要将表(部分)加载到C ++数据结构中,执行计算(可能需要很长时间),最后将一些行添加到同一个表中。

问题是几个用户可以同时访问数据库,我希望锁定表,因为数据已加载到内存中,直到计算结果写入表中。

使用ODBC SDK,是否可以显式锁定和解锁部分表?

我尝试过以下测试程序,但不幸的是td语句在释放INSERT之前成功:

StmtHandle1

1 个答案:

答案 0 :(得分:2)

  

不幸的是,INSERT语句在StmtHandle1之前成功   释放

默认情况下,SQL Server以自动提交模式运行,即打开tarnsaction并为您提交。

您已请求TABLOCKX并且该表在您的交易期间已被锁定,但您想要的是明确地开启交易并且不要commit / rollback直到你完成计算,即你应该使用

begin tran; SELECT top 1 * FROM [MyTable] WITH (TABLOCKX, HOLDLOCK);

而且您不需要阅读整个表格,top 1 *就足够了。