2016-08-24 4 views
-1

最近、サーバー上のすべてのDBにまたがるビューを削除して再作成する必要がありました。私たちの元のスクリプトは、私たちが少し非効率であることがわかったカーソルを使用しました。私がここで尋ねた以前の質問では、sys.sp_MSforeachdb手続きが私の注目を集めました。私はそれを使って必要なことを正確に行うことができました。サーバー上のすべてのDBのビューを削除して再作成する方法

execステートメントの長さに留意するだけで済みます。明らかに長さの制限があり、私が持っていた正確なスクリプトは、すべてのエイリアスを削除してselect文を集めるまで、エラーを投げていました。別の行に約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

なぜこのメソッドをexecuteqlメソッド内にカプセル化しないのですか?あなたのすべてのDBの上でこれを裸で実行するのは少し危険です。 –

関連する問題