Sql-Server

T-SQL 檢查是否可以在 tableX 上創建索引視圖?

  • October 6, 2016

在測試環境中應用我的數據庫更改後,測試團隊開始測試他們的流程,我得到的一件事是截斷表錯誤,因為該表在索引視圖中使用。

   (1 row(s) affected)
   ProductIconTypes ending
   ProductImageCategories starting
   Msg 3729, Level 16, State 2, Line 1
   Cannot TRUNCATE TABLE 'dbo.ProductImageCategories' 
because it is being referenced by object 'VWProductImageGetByStyle'.

問題:

1)下次我想在我的一個數據庫上放置一個索引視圖時,我究竟應該檢查什麼?

2)我可以通過我最喜歡的路線(T-SQL)來完成這項工作嗎?

我也不介意powershell。

不幸的是,在這些有問題的伺服器上,我們仍然使用 SQL Server 2005 和 SQL Server 2008 R2。

一條評論:

這些版本對我們可以作為替代方案做的事情施加了很多限制。例如,篩選索引在 SQL Server 2005 上不可用。

如果可能的話,我實際上正在尋找一種方法來找出如果我創建這個索引視圖會停止工作。在我的範例中,截斷表不再起作用。

由於創建索引視圖本質上是創建視圖WITH SCHEMABINDING,因此您不能再針對會影響視圖定義的基礎對象執行任何 DDL 語句。在這種情況下TRUNCATE(DDL 操作)被視為影響視圖。

檢測在使用模式綁定創建視圖時會中斷的任何查詢將等於檢測對基礎表執行 DDL 語句的查詢,這取決於查詢的來源,但您基本上需要查找ALTER TABLE|VIEW <myobject>視圖中使用的所有對像或TRUNCATE TABLE <mytable>

如果您的所有訪問都來自儲存過程,您可以使用此方法搜尋它們。

如果您的所有查詢都是從您的應用程序生成的並且您擁有它的原始碼,您可以搜尋原始碼或原始碼控制儲存庫。

如果你有一個預編譯的 3rd 方應用程序,你可以通過使用也有 Windows 建構的字元串來幸運。

如果您的應用程序使用類似 ORM 的框架,那麼您可能會不走運。

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