如何在服务器上的所有数据库上删除并重新创建视图

时间:2016-08-24 17:03:21

标签: sql sql-server

我最近需要删除并重新创建服务器上所有数据库的视图。我们的原始脚本使用了一个我们发现效率有点低的游标。在我之前提到的一个早先的问题中,sys.sp_MSforeachdb程序引起了我的注意。我能够用它来完成所需的工作。

你必须注意exec语句的长度。显然有一个长度限制,我删除所有别名并将select语句组合在一起的确切脚本会抛出错误。我在不同的行上有大约80列。有一些必要的别名,所以我显然把它留在了需要的地方。

1 个答案:

答案 0 :(得分: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'