2016-08-24 67 views
-1

我最近需要刪除並重新創建服務器上所有數據庫的視圖。我們原來的腳本使用了一個我們發現效率不高的遊標。在前面提到的問題中,sys.sp_MSforeachdb程序引起了我的注意。我能夠用它來完成所需的工作。如何刪除並重新創建服務器上所有數據庫的視圖

你只需要注意exec語句的長度。顯然有一個長度限制,我的確切腳本是拋出錯誤,直到我刪除所有的別名和聚集選擇語句。我有大約80列在不同的線路上。有一些必要的別名,所以我顯然留下了需要的地方。

+0

我有一個答案,一旦我格式化後。 – Bgonzales

回答

0

這是我結束了劇本:

USE [Master] 

EXECUTE master.sys.sp_MSforeachdb 
'USE [?]; IF db_name() NOT IN (''master'',''model'',''msdb'',''ReportServer'',''ReportServerTempDB'',''tempdb'') 
BEGIN USE ? 

    IF EXISTS (SELECT * FROM sys.views WHERE object_id = OBJECT_ID(N''[ViewName]'')) 
     DROP VIEW [ViewName] 

    EXEC('' 
      CREATE VIEW ViewName AS 

      SELECT 
      db_name() DBName, a.Col1,a.Col2,a.Col3,t.Col1 

      FROM Activity a 
      LEFT OUTER JOIN TerminologyCache t ON a.ActivityTypeName = t.TerminologyKeyName 
      WHERE 
      a.activityProviderName = ''''Parm1'''' 
      and (ISNULL(t.TerminologyCultureName,''''en-US'''') = ''''en-US'''') 

     '') 

END' 
+0

爲什麼不將這個方法封裝在executableql方法中?看起來有點冒險,在你的所有數據庫中如此裸體地運行它。 –

相關問題