Sql 如何在所有DB';它在服务器上
我最近需要删除并重新创建服务器上所有数据库的视图。我们最初的脚本使用了一个游标,我们发现它有点低效。在我之前询问的一个问题中,sys.sp_MSforeachdb程序引起了我的注意。我能够用它来做需要的事情Sql 如何在所有DB';它在服务器上,sql,sql-server,Sql,Sql Server,我最近需要删除并重新创建服务器上所有数据库的视图。我们最初的脚本使用了一个游标,我们发现它有点低效。在我之前询问的一个问题中,sys.sp_MSforeachdb程序引起了我的注意。我能够用它来做需要的事情 你只需要注意exec语句的长度。显然有一个长度限制,在我删除所有别名并合并select语句之前,我使用的脚本都会抛出错误。我在其中有大约80列,分别放在不同的行中。有一些别名是必需的,所以我显然把它们放在了需要的地方。这是我最后得到的脚本: USE [Master] EXECUTE mas
你只需要注意exec语句的长度。显然有一个长度限制,在我删除所有别名并合并select语句之前,我使用的脚本都会抛出错误。我在其中有大约80列,分别放在不同的行中。有一些别名是必需的,所以我显然把它们放在了需要的地方。这是我最后得到的脚本:
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'
一旦我格式化了它,我就有一个答案要发布。为什么不将这个方法封装在executesql方法中呢?在你的数据库中如此赤裸裸地运行这个似乎有点冒险。