SqlCommand.ExecuteNonQuery locks the table

本文关键字:table the locks ExecuteNonQuery SqlCommand | 更新日期: 2023-09-27 18:02:26

我正在使用c# winform应用程序,我使用SQl server的代码:

SqlCommand comm;
comm.CommandText = "alter table anyTable add someColumn int null";
comm.ExecuteNonQuery();

当我调试这段代码时,就在comm.ExecuteNonQuery();之后,我想去SQL server管理并在相关表上执行"select *"以检查更改。

问题是,我不能触摸这个表,SQL服务器"执行查询"很长一段时间,它不会这样做,直到连接将被刷新,但我可以访问另一个表。

这个问题并不总是存在,我不明白为什么会发生。

谢谢你的帮助!

SqlCommand.ExecuteNonQuery locks the table

目标表将被锁定,直到ALTER table语句完全完成。为了保持完整性,数据库需要阻止对该表的访问。

创建一个按键引用初始表的额外表不是更好吗?

CREATE Original(id int, value1 int PRIMARY KEY(Id))
CREATE Secondary(OriginalId int, ColumnName VARCHAR(50), value INT PRIMARY KEY(OriginalId, ColumnName))
ALTER TABLE Secondary  ADD  CONSTRAINT [FK_Secondary_Original] FOREIGN KEY([OriginalId] )
REFERENCES Original ([Id])
ON DELETE CASCADE

在这种情况下,您将能够扩展原始行内容运行时行方向只需通过简单的INSERT到Secondary表

谢谢大家的帮助。

我的SQL脚本中有一个开放的事务…