Sql server 锁定表是否会锁定其他表,以防它们在sql server中定义了视图

Sql server 锁定表是否会锁定其他表,以防它们在sql server中定义了视图,sql-server,sql-server-2008,Sql Server,Sql Server 2008,我有三张桌子: 进口批次 病人图片 PatientChartBatchMapping此表具有ImportBatch和PatientChartImages的外键 我定义了一个未索引视图,从3个表中选择记录。我明确地锁定PatientChartImages表,通过以下命令生成生产数据库的阻塞场景 begin transaction update PatientChartImages set imagesequence=imagesequence --Commit transaction 上面的查询

我有三张桌子:

进口批次 病人图片 PatientChartBatchMapping此表具有ImportBatch和PatientChartImages的外键 我定义了一个未索引视图,从3个表中选择记录。我明确地锁定PatientChartImages表,通过以下命令生成生产数据库的阻塞场景

begin transaction
update PatientChartImages set imagesequence=imagesequence
--Commit transaction
上面的查询锁定了TChartImages表。此外,以下查询超时:

select * from ImportBatch where importbatchid=@importbatchid

当我删除视图并执行相同的过程时,ImportBatch查询不会超时。有人能解释这种行为吗。这是故意的还是我做了什么疯狂的事?

单凭一个视图不会导致这种行为。但索引视图肯定会。或者imagesequence上的外键约束(如果存在)。

如果与这两个表没有关系,则是其他原因导致超时。您可以使用存储过程sp_who和sp_who2查看谁持有锁或阻塞。比内置的要好得多。