CREATE/DROP VIEW 是否需要 SCH-M 锁

Zac*_*her 1 sql-server sql-server-2012 locking

作为处理发票的一部分,我们的第 3 方 ERP 创建、查询,然后在其中一个 ERP 数据库表上删除视图。

我们对此有不同的担忧,但我真的很好奇:CREATE 或 DROP 语句中的任何一个都需要对数据库或视图中涉及的表使用模式修改锁吗?

如果没有,进程中是否还有其他需要我们关注的锁类型?

Eri*_*ing 6

这很容易用一个虚拟表自己测试。它不必是任何花哨的东西。

CREATE TABLE dbo.t1 (id INT)
INSERT dbo.t1 ( id )
VALUES ( 1 )
Run Code Online (Sandbox Code Playgroud)

创建表后,启动一个阻塞事务。

BEGIN TRAN
UPDATE dbo.t1 SET id = 2

--ROLLBACK 
Run Code Online (Sandbox Code Playgroud)

在另一个 SSMS 窗口中,创建一个视图。

CREATE VIEW dbo.YourMom
--WITH SCHEMABINDING /*this makes no difference*/
AS 
SELECT *
FROM dbo.t1
Run Code Online (Sandbox Code Playgroud)

这立即成功完成,但尝试查询视图或表将被阻止。

SELECT *
FROM dbo.YourMom

SELECT *
FROM dbo.t1
Run Code Online (Sandbox Code Playgroud)

值得注意的是,视图没有任何特殊属性。他们只是一个查询。

我不确定为什么您的供应商在流程中创建和删除它们,除非需要动态生成定义,因为您有自定义表或其他东西。