如何将 NOLOCK 与 TADOQuery 和 TADOTable 一起使用?

发布于 2024-09-25 09:39:27 字数 337 浏览 0 评论 0原文

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

两个问题:

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

  2. 如何使用 TADOTable 实现同样的效果? TADOTable 没有任何 SQL,那么我如何告诉它使用 NOLOCK 提示?

谢谢

I have the SQL text "SELECT * FROM TABLE1 WITH (NOLOCK)".

Two questions:

  1. How do I make my TADOQuery use the NOLOCK hint without having to include that in the SQL text? I have literally thousands of TADOQuery's with their SQL dynamically built, and it would be difficult to add WITH (NOLOCK) to all of them, not to mention I use with with database platforms other than MSSQL. Is there a TADOQuery property?

  2. How do I achieve the same thing with a TADOTable? TADOTable's don't have any SQL, so how do I tell it to use the NOLOCK hint?

Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

帥小哥 2024-10-02 09:39:27

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

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

另外,使用 NOLOCK 时您应该非常小心。它意味着 READ UNCOMMITTED,又名脏读。您正在绕过事务保护,除非您有充分的理由绕过它,否则您不应该这样做 - 性能的提升可能抵不上数据完整性和一致性的损失。

Hints are database specific, thereby you have to issue the proper one for each database supported. In some databases there's also nothing equivalent, for example Oracle does not allow anything alike (readers never block writers and writers never block readers, thereby no need).

IMHO you shouldn't use TADOTable components at all - anyway AFAIK you have no way to specify an hint for the generated query - which is far too generic anyway.

Also you should be VERY careful to use NOLOCK. It means READ UNCOMMITTED, aka dirty reads. You're bypassing transaction protection, and unless you have a very good reason to bypass it you shouldn't - the gain in performance may be not worth the loss in data integrity and consistency.

〗斷ホ乔殘χμё〖 2024-10-02 09:39:27

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

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED

欢呼
美联社

if you use MS SQL, run below statement once on connection

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED

Cheer
AP

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文