SqlCommand.ExecuteNonQuery锁定表

时间:2013-03-06 12:07:33

标签: c# sql sql-server winforms

我正在使用C#winform应用程序,我使用SQl服务器获得此代码:

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

当我在comm.ExecuteNonQuery();之后调试此代码部分时,我想转到SQL服务器管理并在相关表上执行“select *”以检查更改。

问题是我无法触摸这个表,SQL服务器“执行查询”已经很长时间了,直到刷新连接才会这样做,但是我可以找到另一个表。

这个问题并不总是存在,我无法弄清楚它为什么会发生。

感谢您的帮助!!!

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

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

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到辅助表

,就可以逐行扩展原始行内容运行时

答案 2 :(得分:0)

谢谢大家的帮助。

我的一个SQL脚本中有一个打开的事务......