Sql-Server
CREATE/DROP VIEW 是否需要 SCH-M 鎖
作為處理髮票的一部分,我們的第 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
值得注意的是,視圖沒有任何特殊屬性。他們只是一個查詢。
我不確定為什麼您的供應商會在流程中創建和刪除它們,除非定義需要動態生成,因為您有自定義表或其他東西。