我最近需要删除并重新创建服务器上所有数据库的视图。我们的原始脚本使用了一个我们发现效率有点低的游标。在我之前提到的一个早先的问题中,sys.sp_MSforeachdb程序引起了我的注意。我能够用它来完成所需的工作。
你必须注意exec语句的长度。显然有一个长度限制,我删除所有别名并将select语句组合在一起的确切脚本会抛出错误。我在不同的行上有大约80列。有一些必要的别名,所以我显然把它留在了需要的地方。
答案 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'