Sql server 2008 在插入表之前锁定表

Sql server 2008 在插入表之前锁定表,sql-server-2008,insert,network-programming,locking,Sql Server 2008,Insert,Network Programming,Locking,我创建了一个与网络协同工作的C#应用程序。我的应用程序使用SQL Server 2008 Express 我的问题是: 当两个人同时在两台计算机上单击“插入”按钮时,会向数据库中添加两行相同的数字(这是故障) 如果时间不一样,我的应用程序检查一些条件,这个问题就不会发生 我的问题是: 现在我想在插入前为1人锁定表,并在插入后解锁表 如何做到这一点?您必须使用标识列 如果要在sql server中锁定表,可以这样做 INSERT INTO Table1 WITH (TABLOCK) SELECT

我创建了一个与网络协同工作的C#应用程序。我的应用程序使用SQL Server 2008 Express

我的问题是:

当两个人同时在两台计算机上单击“插入”按钮时,会向数据库中添加两行相同的数字(这是故障)

如果时间不一样,我的应用程序检查一些条件,这个问题就不会发生

我的问题是:

现在我想在插入前为1人锁定表,并在插入后解锁表


如何做到这一点?

您必须使用标识列

如果要在sql server中锁定表,可以这样做

INSERT INTO Table1 WITH (TABLOCK)
SELECT @Col1, @Col2, @Col3, @Col4 OPTION (FAST 1)

UPDATE Table1 WITH (TABLOCK) 
SET Col5 = @Col5
WHERE @Col1 = @Var

UPDATE Table2 WITH (TABLOCK) 
SET Col = @ColVal 

您如何管理主键?您看到的可能是由于表格定义中的错误实践。可能你应该让数据库管理主键…我知道。我将ID列设为主列,但由于某种原因,在这种情况下,我有另一个列必须是主列。一个词:不要这样做!您需要修复定义导致问题的数字的例程。锁定整个表并不是解决问题的方法!最简单的解决方案是使用
INT-IDENTITY
类型的列,然后SQL Server将自动处理编号,并且SQL Server将保证无论有多少人同时单击您的
Insert
按钮,都不会重复。如果您想自己分配此值,您将遇到一个麻烦。请意识到,当表被锁定时,所有其他用户也会被锁定。你打算怎么办?这根本不是个好主意。。。