1

我有 SQL 文本“SELECT * FROM TABLE1 WITH (NOLOCK)”。

两个问题:

  1. 如何让我的 TADOQuery 使用 NOLOCK 提示,而不必在 SQL 文本中包含它?我实际上有数千个 TADOQuery 的 SQL 是动态构建的,而且很难将 WITH (NOLOCK) 添加到所有这些中,更不用说我与 MSSQL 以外的数据库平台一起使用了。有 TADOQuery 属性吗?

  2. 如何使用 TADOTable 实现相同的目标?TADOTable 没有任何 SQL,那么如何告诉它使用 NOLOCK 提示呢?

谢谢

4

2 回答 2

2

提示是特定于数据库的,因此您必须为每个支持的数据库发出正确的提示。在某些数据库中也没有等效的东西,例如 Oracle 不允许任何类似的东西(读取器从不阻塞写入器,写入器从不阻塞读取器,因此没有必要)。

恕我直言,您根本不应该使用 TADOTable 组件-无论如何,AFAIK 您无法为生成的查询指定提示-无论如何,这太通用了。

此外,您应该非常小心地使用 NOLOCK。这意味着 READ UNCOMMITTED,又名脏读。您正在绕过事务保护,除非您有充分的理由绕过它,否则您不应该绕过它——性能的提高可能不值得数据完整性和一致性的损失。

于 2010-10-01T15:44:58.070 回答
0

如果您使用 MS SQL,请在连接时运行以下语句

设置事务隔离级别读取未提交

欢呼AP

于 2010-10-01T23:32:05.970 回答