Sql-Server

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

  • December 16, 2017

作為處理髮票的一部分,我們的第 3 方 ERP 創建、查詢然後刪除其中一個 ERP 數據庫表的視圖。

我們對此有不同的擔憂,但我真的很好奇:CREATE 或 DROP 語句是否需要數據庫或視圖中涉及的表上的模式修改鎖?

如果沒有,在這個過程中是否還有其他我們應該關注的鎖類型?

這很容易使用虛擬表自行測試。它不必是什麼花哨的東西。

CREATE TABLE dbo.t1 (id INT)
INSERT dbo.t1 ( id )
VALUES ( 1 )

創建表後,啟動阻塞事務。

BEGIN TRAN
UPDATE dbo.t1 SET id = 2

--ROLLBACK 

在另一個 SSMS 視窗中,創建一個視圖。

CREATE VIEW dbo.YourMom
--WITH SCHEMABINDING /*this makes no difference*/
AS 
SELECT *
FROM dbo.t1

這立即成功完成,但嘗試查詢視圖或表將被阻止。

SELECT *
FROM dbo.YourMom

SELECT *
FROM dbo.t1

值得注意的是,視圖沒有任何特殊屬性。他們只是一個查詢。

我不確定為什麼您的供應商會在流程中創建和刪除它們,除非定義需要動態生成,因為您有自定義表或其他東西。

引用自:https://dba.stackexchange.com/questions/193182