2

建议的副本没有回答标题中的问题。

我想在没有任何其他“用户”(我不确定正确的术语)在它们之间执行命令的情况下执行两个 MSSQL 命令。

搜索时,我发现了两种似乎可以实现但不确定的方法:

  1. 使用制表符。- 但我已经看到它被认为是不好的做法。

  2. 使用事务——但我能找到的只是它是原子的,不一定会锁定其他操作。

什么方法是正确的方法?

更多信息:只有我的程序将访问数据库,但它可能来自它的多个实例,我不介意短暂的等待 - 如果一个实例必须排队等待一两秒钟 - 这很好。

编辑:我正在尝试插入一行并获取其身份。(这似乎不像我期望的那样简单。)

4

3 回答 3

11

要插入一行并获取其标识,您无需阻止所有其他命令。只需结合使用事务SCOPE_IDENTITY

BEGIN TRAN;

INSERT INTO MyTable (MyColumn)
VALUES ('MyValue');

SELECT SCOPE_IDENTITY();

COMMIT TRAN;

更多关于MSDNSCOPE_IDENTITY的信息。

于 2013-04-15T13:44:56.743 回答
3

您需要使用隔离级别为的事务Serializable。这将防止其他用户在事务期间读取或修改查询使用的行,而不会完全锁定表。

于 2013-04-15T13:42:53.203 回答
1

您不能阻止在其他两个命令 之间执行命令。您所能做的就是防止数据被修改,直到您自己完成修改为止。这是使用使用相应隔离级别的事务来完成的。

于 2013-04-15T13:45:05.137 回答