使用条件从另一个数据库导入所有视图的SQL脚本

使用条件从另一个数据库导入所有视图的SQL脚本,sql,sql-server,sql-server-2005,view,Sql,Sql Server,Sql Server 2005,View,使用SQLServer2005。我们有一个主数据库,可以随时创建新视图,有时一天创建几次 我们有多个具有相同表结构的客户数据库。我将链接以保持客户的数据库视图与主视图同步 目前,我们使用managementstudio从master生成一个包含所有视图(它们都以!)的SQL脚本。然后删除所有以“开始”开头的当前视图!在客户的数据库上,并在每个数据库上运行脚本 我想能够只运行一个脚本,它将删除所有以一个开始的视图!并从主控形状导入所有视图,以 我还希望不必在每次创建或更新视图时生成新脚本 也许这是

使用SQLServer2005。我们有一个主数据库,可以随时创建新视图,有时一天创建几次

我们有多个具有相同表结构的客户数据库。我将链接以保持客户的数据库视图与主视图同步

目前,我们使用managementstudio从master生成一个包含所有视图(它们都以!)的SQL脚本。然后删除所有以“开始”开头的当前视图!在客户的数据库上,并在每个数据库上运行脚本

我想能够只运行一个脚本,它将删除所有以一个开始的视图!并从主控形状导入所有视图,以

我还希望不必在每次创建或更新视图时生成新脚本

也许这是sql脚本不可能做到的

*编辑-第一部分完成

由于@Szymon提供了脚本的初始部分,该部分运行良好,因此不得不对其进行一些修改,以适应sql2005和其中包含空格的一些视图

declare @sql as nvarchar(max)
set @sql = N''
select @sql = @sql + 'DROP VIEW "' + name + '";' from sys.views where name like '!%'
exec (@sql)

我已经试过了,但我无法理解第二部分,当然它会返回一些(不是全部)视图名称和一些值,但我不确定从那里开始该怎么做。

这是绝对可行的。您可以使用
sys
视图获取所有必要的信息

例如,如果要删除所有以
开头的视图在数据库
示例中,您可以使用:

declare @sql as nvarchar(max) = N''
select @sql = @sql + 'DROP VIEW ' + name + ';' from sample.sys.views where name like '!%'
exec (@sql)
以类似的方式,您可以使用以下查询获取创建视图的信息(这只是一个示例,您可能需要更多列):


这不是一个完整的解决方案,但应该让您走上正确的道路。

您是否尝试过使用可以与多个数据库通信的外部工具编写脚本?SSIS、Powershell或C#应用程序都可以做到这一点……嗯,我相信您,但不知道如何实现类似的功能。谢谢您的帮助。升降台部分在稍作改动后工作良好。我现在正在努力解决困难的部分。
select v.name, c.name, t.name, c.max_length, c.is_nullable from sys.views v
inner join sys.columns c on v.object_id = c.object_id
inner join sys.types t on t.system_type_id = c.system_type_id