【发布时间】:2017-10-23 09:51:26
【问题描述】:
我必须对存储在 MSSQL Server 数据库中的数据执行一些计算,然后将结果保存在同一个数据库中。
我需要将表(部分)加载到 C++ 数据结构中,执行计算(这可能需要大量时间),最后将一些行添加到同一个表中。
问题是多个用户可以同时访问数据库,我希望表被锁定,因为数据加载到内存中,直到计算结果写入表。
使用 ODBC SDK,是否可以显式锁定和解锁表的一部分?
我试过下面的测试程序,可惜INSERT语句在StmtHandle1被释放之前就成功了:
SQLDriverConnect(ConHandle1, NULL, (SQLCHAR *)"DRIVER={ODBC Driver 13 for SQL Server};"
"SERVER=MyServer;"
"DATABASE=MyDatabase;"/*, ... */);
SQLSetStmtAttr(StmtHandle1,SQL_ATTR_CONCURRENCY,(SQLPOINTER)SQL_CONCUR_LOCK,SQL_IS_INTEGER);
SQLExecDirect(StmtHandle1, (SQLCHAR *)"SELECT * FROM [MyTable] WITH (TABLOCKX, HOLDLOCK)", SQL_NTS);
SQLDriverConnect(ConHandle2, NULL, (SQLCHAR *)"DRIVER={ODBC Driver 13 for SQL Server};"
"SERVER=MyServer;"
"DATABASE=MyDatabase;"/*, ... */);
SQLSetStmtAttr(StmtHandle2,SQL_ATTR_CONCURRENCY,(SQLPOINTER)SQL_CONCUR_LOCK,SQL_IS_INTEGER);
SQLExecDirect(StmtHandle2, (SQLCHAR *)"INSERT INTO [MyTable] VALUES (...)", SQL_NTS);
【问题讨论】:
标签: c++ sql sql-server odbc