是否“设置交易级别”?需要开始交易吗?

发布于 2024-10-06 21:34:24 字数 273 浏览 5 评论 0原文

在 MS SQL Server 中,如果我在存储过程中使用“SET TRANSACTION ISOLATION LEVEL”,是否需要将 select 语句包装在 BEGIN/END TRANSACTION 块中?以下内容会按预期工作吗?

CREATE PROCEDURE my_sproc AS
BEGIN

    SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED

    SELECT * FROM MyTable

END

In MS SQL Server, if I use "SET TRANSACTION ISOLATION LEVEL" in a stored procedure, do I need to wrap the select statements in a BEGIN/END TRANSACTION Block? Will the following work as expected?

CREATE PROCEDURE my_sproc AS
BEGIN

    SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED

    SELECT * FROM MyTable

END

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

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

发布评论

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

评论(2

金橙橙 2024-10-13 21:34:24

TRANSACTION ISOLATION LEVEL 设置是连接级别设置。无需将其包装在事务中。

话虽这么说,您知道在此设置中您会出现脏读等情况吗?

您可以通过使用锁定提示在逐个查询的基础上完成相同的操作,例如:

SELECT * FROM MyTable WITH (NOLOCK)

The TRANSACTION ISOLATION LEVEL setting is a connection-level setting. There's no need to wrap it in a transaction.

That being said, you understand you will have dirty reads and such from this setting?

You can accomplish the same thing on a query-by-query basis by using locking hints such as:

SELECT * FROM MyTable WITH (NOLOCK)

拧巴小姐 2024-10-13 21:34:24

SET TRANSACTION ISOLATION LEVEL 与 BEGIN/COMMIT/ROLLBACK 不同

  • 第一个更改隔离与并发设置
  • 第二个定义原子“工作单元”

没有直接链接或交互:不同的概念

SET TRANSACTION ISOLATION LEVEL is different to BEGIN/COMMIT/ROLLBACK

  • The first changes the isolation vs concurrency settings
  • The second defines the atomic "unit of work"

There is no direct link or interaction: different concepts

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