假设有以下一段代码:
 SqlConnection conn = new SqlConnection(DbHelperSQL.connectionString);
            conn.Open();
            using (SqlTransaction CheckOutTrans_DB = conn.BeginTransaction())
            {
                表A的添加
                表B的添加
            }
我想问下在事务中对于表A 是锁表?锁字段?还是锁记录呢?

解决方案 »

  1.   

    先打开查询分析器新建查询
    执行CREATE Table Test
    (
       id int,
       name varchar(100)
    )GO
    begin tran
    insert into Test values(1,'')再
    新建查询
    执行select * from Test可以看出第二个查询是别锁定了
      

  2.   

    可是我测试起来好像不是锁表的。难道SQL中的事务和C#中的事务不一样吗?表示疑惑?
      

  3.   


    什么叫做“C#中的事务”啊?SQL Server数据库系统默认是行锁(基本上凡是正规的商用关系数据库都是行锁,只有个别开源的简单数据库系统才是表锁)。你可以找一本SQL Server管理系统的手册看看关于锁的机制。
      

  4.   


    晕!你给查询写个where条件测试一下啊!
      

  5.   


    8楼的说的很对,SQL Server数据库系统默认就是行锁。
      

  6.   


    8楼的说的很对,SQL Server数据库系统默认就是行锁。
      

  7.   


    不好意识正错了,的确是行级别锁
    我开始还纳闷了,为啥会锁表了原来我的表上面没建立主键
    GO
    CREATE TABLE [dbo].Test(
    [ID] INT NOT NULL,
    Name [nvarchar](20)
    CONSTRAINT [PK_Test] PRIMARY KEY CLUSTERED 
    (
    [ID] ASC
    )WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
    ) ON [PRIMARY]
    GO--插入5行数据
    insert into Test values(1,'')
    insert into Test values(2,'')
    insert into Test values(3,'')
    insert into Test values(4,'')
    insert into Test values(5,'')begin tran
        --更新一行
        Update  Test set name='asasas1111' where id=1
        insert into Test values(6,'')select * from Test where id=1
    昨天一直想不通,今天幸好有看了一次。