问题描述
上下文:生产环境定义视图以访问来自另一个数据库的数据。测试环境需要通过同名不同定义的视图来模拟。安装脚本生成为一个文本文件。我使用的是 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 (将#修改为@)