MS-SQL:如何生成脚本片段以仅在特定机器上创建视图?

问题描述

上下文:生产环境定义视图以访问来自另一个数据库的数据。测试环境需要通过同名不同定义的视图来模拟。安装脚本生成一个文本文件。我使用的是 MS-sql Server 2016。视图是由其他人定义的。

详细信息:CREATE VIEW dbo.view_xyz ... 语法必须是批处理中的 oly 语句,并且--要重新创建视图--我需要删除首先是旧版本的视图。因此,我的安装人员通常这样定义它(如果视图是我自己定义的):

IF (OBJECT_ID(N'dbo.view_xyz','V') IS NOT NULL)
    DROP VIEW dbo.view_xyz
GO

CREATE VIEW dbo.view_xyz  AS
    SELECT ... [snip usual deFinition]

此处,在 GO 之后,满足要求。

我想在生产和测试机器上使用相同的安装脚本。所以,我想有条件地创建视图(即在生产机器上什么都不做,然后在测试机器上删除并再次创建)。我可以测试 sql 实例以识别情况。我想做类似的事情:

IF @@servername = 'TESTMACHINE\sql2016NAMEDINSTANCE'
    IF OBJECT_ID(N'dbo.view_xyz','V') IS NOT NULL
        DROP VIEW dbo.view_xyz

-- the GO cannot be here

    CREATE VIEW dbo.view_xyz  AS
        SELECT * FROM theTableThatSimulatesTheContentOfTheProductionView
END

但是,我不能将 GO 分隔符放在 CREATE VIEW ... 前面。 CREATE VIEW ... 不得位于 IF ... 正文中。

如何解决

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)