微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决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 举报,一经查实,本站将立刻删除。