我必须使用存储在MSSQL Server数据库中的数据执行一些计算,然后将结果保存在同一个数据库中。
我需要将表(部分)加载到C ++数据结构中,执行计算(可能需要很长时间),最后将一些行添加到同一个表中。
问题是几个用户可以同时访问数据库,我希望锁定表,因为数据已加载到内存中,直到计算结果写入表中。
使用ODBC SDK,是否可以显式锁定和解锁部分表?
我尝试过以下测试程序,但不幸的是td
语句在释放INSERT
之前成功:
StmtHandle1
答案 0 :(得分:2)
不幸的是,INSERT语句在StmtHandle1之前成功 释放
默认情况下,SQL Server以自动提交模式运行,即打开tarnsaction并为您提交。
您已请求TABLOCKX
并且该表在您的交易期间已被锁定,但您想要的是明确地开启交易并且不要commit
/ rollback
直到你完成计算,即你应该使用
begin tran; SELECT top 1 * FROM [MyTable] WITH (TABLOCKX, HOLDLOCK);
而且您不需要阅读整个表格,top 1 *
就足够了。